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

时间:2018-04-16 13:41:54

标签: python transcrypt python-3.7 python-dataclasses

对于Transcrypt Python to JavaScript compiler的{3.7}版本,我目前正在使用新的@dataclass装饰器。根据{{​​3}},我原本预计会支持==, !=, <, >, >=, <=,但似乎并非如此:

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 个答案:

答案 0 :(得分:13)

他们这样做,而不是默认情况下。每PEP-557

  

dataclass的参数是:

     

...

     
      
  • order:如果为true(默认值为False),则会生成__lt____le____gt____ge__方法。这些比较了   类似于它的字段的元组,按顺序排列。两个实例都在   比较必须是相同的类型。如果order为真,那么   eq为false,引发ValueError
  •   

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