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

16

我目前正在使用Transcrypt Python to 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'

为什么只支持==!=这两个比较运算符?我有没有漏看什么?

1个回答

22

它们确实可以,只是默认情况下没有。根据PEP-557

dataclass的参数包括:

...

  • order:如果为True(默认为False),则会生成__lt____le____gt____ge__方法。这些方法会将类视为其字段的元组并按顺序进行比较。比较中的两个实例必须是相同类型的。如果order为True且eq为False,则会引发ValueError

因此,您需要使用@dataclass(order=True)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接