2 votes

Extension des classes de données immuables (gelées)

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'

2voto

API Points 780

Ah, cela est simplement résolu en ajoutant une autre @dataclass(frozen=True) au décorateur de la classe enfant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X