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

Jac*_*oge 10 python transcrypt python-3.7 python-dataclasses

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

from dataclasses import dataclass

@dataclass
class C:
    x: int = 10
Run Code Online (Sandbox Code Playgroud)

有些比较不起作用:

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

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

jon*_*rpe 13

他们这样做,而不是默认情况下.按照PEP-557:

参数dataclass是:

...

  • order:如果为true(默认为false), , __lt__,__le__,__gt____ge__将产生的方法.这些按顺序将类比较为它的字段的元组.比较中的两个实例必须是相同的类型.如果order为真且 eq为假,ValueError则引发a.

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