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~
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/X5UCN42LFGSGISWD62SUP2BU4WDRGWDM/
Code of Conduct: http://python.org/psf/codeofconduct/