Я dataclasses
новые dataclasses
в Python 3.7
Декоратору dataclass
можно передать аргументы для управления функциями dunder, которые добавляются в класс.
По какой-то причине декоратор, похоже, не поднимает TypeError
для аргумента eq=False
.
Согласно документам:
eq: If true (the default), an __eq__ method will be generated.
This method compares the class as if it were a tuple of its fields, in order.
Both instances in the comparison must be of the identical type
Если я правильно понимаю, если я прохожу eq = False
, __eq__
функция не будет добавлен, и TypeError
должен быть выброшен при сравнении двух экземпляров одного и того же класса. Вместо этого параметр eq
кажется неэффективным.
@dataclass(eq = False)
class Number:
val: int
a = Number(1)
b = Number(2)
c = Number(1)
a == b
False
a == c
False
Вышеупомянутое не вызывает TypeError
и всегда оценивается как False
.
@dataclass()
class Number:
val: int
a = Number(1)
b = Number(2)
c = Number(1)
a
Number(val = 1)
a == b
False
a == c
True
Другие аргументы (например: order
, repr
), похоже, ведут себя так, как ожидалось
@dataclass(order = False, repr = False)
class Number:
val:int
a = Number(1)
b = Number(2)
c = Number(1)
a
<__main__.Number object at 0x7fe1036c8b38>
a < b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'Number' and 'Number'
Разница в моем понимании?
Я использую docker image python/rc-stretch