Я 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