【问题标题】:Why don't Python 3.7 dataclasses support < > <= and >=, or do they?为什么 Python 3.7 数据类不支持 < > <= 和 >=,还是支持?
【发布时间】:2018-04-16 13:41:54
【问题描述】:

对于Transcrypt Python to JavaScript compiler 的3.7.1 版本,我目前正在使用新的@dataclass 装饰器。我曾预计 ==, !=, &lt;, &gt;, &gt;=, &lt;= 会得到支持,就像 the PEP's abstract 一样,但似乎并非如此:

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'

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

【问题讨论】:

    标签: python transcrypt python-3.7 python-dataclasses


    【解决方案1】:

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

    dataclass 的参数为:

    ...

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2018-04-02
      • 1970-01-01
      • 2019-03-26
      • 2012-02-01
      • 1970-01-01
      相关资源
      最近更新 更多