为什么 Python 3.7 数据类不支持 < > <= 和 >=,或者它们支持?



对于Transcrypt Python到JavaScript编译器的3.7.1版本,我目前正在使用新的@dataclass装饰器。根据PEP的摘要,我曾期望==, !=, <, >, >=, <=会得到支持,但事实似乎并非如此:

from dataclasses import dataclass
@dataclass
class C:
x: int = 10

一些比较不起作用:

>>> c1 = C(1)
>>> c2 = C(2)
>>> c1 == c2  # ok
False
>>> c1 < c2  # crash
TypeError: '<' not supported between instances of 'C' and 'C'

为什么不支持比较运算符,除了==!=?还是我忽略了什么?

他们这样做,只是不是默认的。根据 PEP-557:

dataclass的参数包括:

  • order:如果为 true(默认值为 False),将生成__lt____le____gt____ge__方法。这些比较 类,就好像它是其字段的元组一样,按顺序排列。中的两个实例 比较必须是相同的类型。如果order是真的,并且eq是假的,则提出ValueError

所以你想要@dataclass(order=True).

相关内容

  • 没有找到相关文章

最新更新