Heim > Backend-Entwicklung > Python-Tutorial > Wie können wir in Python echte Unveränderlichkeit erreichen?

Wie können wir in Python echte Unveränderlichkeit erreichen?

Mary-Kate Olsen
Freigeben: 2024-10-25 08:25:28
Original
674 Leute haben es durchsucht

How Can We Achieve True Immutability in Python?

Unveränderliche Objekte in Python erstellen

Unveränderliche Objekte in Python zu erstellen kann eine Herausforderung darstellen. Ein einfaches Überschreiben von setattr reicht nicht aus, da Attribute während der Initialisierung nicht festgelegt werden können. Eine häufig verwendete Lösung besteht darin, ein Tupel in eine Unterklasse zu unterteilen, wie unten gezeigt:

<code class="python">class Immutable(tuple):
    def __new__(cls, a, b):
        return tuple.__new__(cls, (a, b))

    @property
    def a(self):
        return self[0]
        
    @property
    def b(self):
        return self[1]

    def __str__(self):
        return "<Immutable {0}, {1}>".format(self.a, self.b)
    
    def __setattr__(self, *ignored):
        raise NotImplementedError

    def __delattr__(self, *ignored):
        raise NotImplementedError</code>
Nach dem Login kopieren

Dieser Ansatz gewährt jedoch Zugriff auf die Attribute a und b über self[0] und self[1], was unpraktisch sein kann .

Um reine Python-Unveränderlichkeit zu erreichen, gibt es eine weitere Alternative:

<code class="python">Immutable = collections.namedtuple("Immutable", ["a", "b"])</code>
Nach dem Login kopieren

Diese Methode generiert einen Typ mit dem gewünschten Verhalten, indem sie Slots verwendet und vom Tupel erbt. Es bietet die Vorteile der Kompatibilität mit Pickle und Copy, ermöglicht aber dennoch den Zugriff auf Attribute über [0] und [1].

Das obige ist der detaillierte Inhalt vonWie können wir in Python echte Unveränderlichkeit erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage