我正在尝试dataclasses
Python 3.7中的新功能
装饰器dataclass
可以传递参数来控制添加到类中的 dunder 函数。
出于某种原因,装饰者似乎没有提出TypeError
争论eq=False
。
根据文档:
eq: If true (the default), an __eq__ method will be generated.
This method compares the class as if it were a tuple of its fields, in order.
Both instances in the comparison must be of the identical type
如果我理解正确,如果我通过eq = False
,__eq__
将不会添加函数,并且TypeError
在比较同一类的两个实例时应该抛出 a 。相反,该eq
参数似乎没有效果。
@dataclass(eq = False)
class Number:
val: int
a = Number(1)
b = Number(2)
c = Number(1)
a == b
False
a == c
False
上面没有提出TypeError
并且总是评估为False
。
@dataclass()
class Number:
val: int
a = Number(1)
b = Number(2)
c = Number(1)
a
Number(val = 1)
a == b
False
a == c
True
其他参数(例如:order
,repr
)似乎表现如预期
@dataclass(order = False, repr = False)
class Number:
val:int
a = Number(1)
b = Number(2)
c = Number(1)
a
<__main__.Number object at 0x7fe1036c8b38>
a < b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'Number' and 'Number'
我的理解有差距吗?
我正在使用泊坞窗图像python/rc-stretch