J'ai trouvé que l'utilisation d'une classe de données gelée était la solution la plus propre à la situation. rendre les objets Python immuables . L'implémentation est vraiment simple : il suffit d'ajouter un décorateur de classe unique :
from dataclasses import dataclass
@dataclass(frozen=True)
class Immutable:
attr1: int
attr2: int
Maintenant, je veux étendre le Immutable
en introduisant un nouvel attribut attr3
:
class MyImmutableChild(Immutable):
attr3: int
Mais, le comportement n'est pas celui attendu :
>>> immutable_obj = MyImmutableChild(attr1=1, attr2=3, attr3=5)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-2b6c18366721> in <module>
----> 1 immutable_obj = MyImmutableChild(attr1=1, attr2=3, attr3=5)
TypeError: __init__() got an unexpected keyword argument 'attr3'