Just look at the class above, defined by dataclass
:
def __init__(self, nome: str, preco_unitario: float,
quantidade: int = 0) -> None:
self.nome = nome
self.preco_unitario = preco_unitario
self.quantidade = quantidade
def __repr__(self):
return f'Item(nome={self.nome!r}, preco_unitario={self.preco_unitario!r}, quantidade={self.quantidade!r})'
def __eq__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) == (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
def __ne__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) != (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
def __lt__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) < (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
def __le__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) <= (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
def __gt__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) > (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
def __ge__(self, outra):
if outra.__class__ is self.__class__:
return (self.nome, self.preco_unitario, self.quantidade) >= (outra.nome, outra.preco_unitario, outra.quantidade)
return NotImplemented
As you can see, it’s a lot of code saved by this decorator, so it’s totally justified to use it if you’re going to define these methods anyway. The less code, the less work and the less chance of errors.