[Python-Dev] Dataclasses, frozen and __post_init__
Ben Lewis
benlewisj at gmail.com
Fri Feb 16 18:38:44 EST 2018
More information about the Python-Dev mailing list
Fri Feb 16 18:38:44 EST 2018
- Previous message (by thread): [Python-Dev] Apology -- ignore previous message
- Next message (by thread): [Python-Dev] Dataclasses, frozen and __post_init__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello I have been using dataclasses package in a pet project of mine. I'm sorry if this issue has already been raised. I came across a situation where I wanted to use the __post_init__ function to initialise some inherited fields from a dataclass with frozen=True. The problem is that because it is frozen, assigning to the field doesn't work. There are two workarounds without changing the base class to frozen=False, which could be in a library. 1. Use object.__setattr__, this is ugly and not very user or beginner friendly. 2. Extract __post_init__ out into a factory function. Then it also loses all the advantages of the __post_init__ and InitVar mechanism. Both frozen and unfrozen dataclasses should be able to use the same initialisation mechanism for consistency. Being consistent would ease of converting an unfrozen dataclass to a frozen one if the only code that actually modifies the instance is in __post_init__ function. I think frozen classes should be able to be mutated during the __post_init__ call. To implements this a frozen dataclass could have a flag to says it's not yet fully initialised and the flag would be checked in the frozen setattr/delattr methods. This flag could be located as a special attribute on the instance or be in a weak reference dict. Thanks Ben Lewis -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20180217/a8c74809/attachment.html>
- Previous message (by thread): [Python-Dev] Apology -- ignore previous message
- Next message (by thread): [Python-Dev] Dataclasses, frozen and __post_init__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list