In [1]: from dataclasses import dataclass
In [2]: @dataclass
...: class Bio:
...: name: str
...: age: int
...: height: float
...:
In [3]: from dataclasses import is_dataclass
In [4]: is_dataclass(Bio)
Out[4]: True
In [5]: b = Bio('John', 25, 6.5)
In [6]: is_dataclass(b)
Out[6]: True
要检查,b是否是dataclass的实例而不是dataclass本身:
^{pr2}$
Bio是一个数据类,因此以下表达式的计算结果为False:
In [8]: is_dataclass(Bio) and not isinstance(Bio, type)
Out[8]: False
让我们检查常规类:
In [9]: class Car:
...: def __init__(self, name, color):
...: self.name = name
...: self.color = color
...:
我们知道Car不是数据类:
In [10]: is_dataclass(Car)
Out[10]: False
In [11]: c = Car('Mustang', 'Blue')
Docs
正如@Arne在内部提到的,它只是检查
hasattr(something, '__dataclass_fields__')
,但我建议不要依赖它:cPython
似乎还没有什么东西支持Python3.7。至少Jython、IronPython和pypyy不支持它。在其他所有内容,包括检查dataclass类型和dataclass实例之间的区别,都在
is_dataclass
方法的文档中在上述答案的基础上,以下说明了
is_dataclass()
的用法:记住:传递给
is_dataclass()
的参数可以是dataclass或dataclass的实例,以便从方法调用中返回True
。在要检查,
^{pr2}$b
是否是dataclass的实例而不是dataclass本身:Bio
是一个数据类,因此以下表达式的计算结果为False
:让我们检查常规类:
我们知道
Car
不是数据类:Car
的实例都不是dataclass实例:相关问题 更多 >
编程相关推荐