On 7/6/22 17:01, Steve Jorgensen wrote:
Perhaps, this has already been addressed in a newer release (?) but in Python 3.9, making `@dataclass` work with `Enum` is a bit awkward.
Currently, it order to make it work, I have to: 1. Pass `init=False` to `@dataclass` and hand-write the `__init__` method 2. Pass `repr=False` to `@dataclass` and use `Enum`'s representation or write a custom __repr__
Example: In [72]: @dataclass(frozen=True, init=False, repr=False) ...: class Creature(Enum): ...: legs: int ...: size: str ...: Beetle = (6, 'small') ...: Dog = (4, 'medium') ...: def __init__(self, legs, size): ...: self.legs = legs ...: self.size = size ...:
In [73]: Creature.Dog Out[73]: <Creature.Dog: (4, 'medium')>
So why use dataclass then? class Creature(Enum): Beetle = (6, 'small') Dog = (4, 'medium') def __init__(self, legs, size): self.legs = legs self.size = size and
list(Creature) [<Creature.Beetle: (6, 'small')>, <Creature.Dog: (4, 'medium')>]
Creature.Beetle.size 'small'
Creature.Beetle.legs 6
It looks like dataclass was just making you do a bunch of extra work. -- ~Ethan~