„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So definieren Sie Klasseneigenschaften in Python: Gibt es einen @classproperty-Dekorator, der @classmethod ähnelt?

So definieren Sie Klasseneigenschaften in Python: Gibt es einen @classproperty-Dekorator, der @classmethod ähnelt?

Veröffentlicht am 08.11.2024
Durchsuche:219

How to Define Class Properties in Python: Is there a @classproperty decorator similar to @classmethod?

So definieren Sie Klasseneigenschaften in Python

In Python können Sie Methoden zu einer Klasse hinzufügen, indem Sie den @classmethod-Dekorator verwenden. Aber gibt es einen ähnlichen Mechanismus zum Definieren von Klasseneigenschaften?

Sicherlich. Zu diesem Zweck stellt Python den @classproperty-Dekorator zur Verfügung. Seine Syntax und Verwendung ähneln stark der von @classmethod:

class Example(object):
    the_I = 10
    
    @classproperty
    def I(cls):
        return cls.the_I

Der @classproperty-Dekorator erstellt eine Klasseneigenschaft mit dem Namen I. Sie können auf diese Eigenschaft direkt in der Klasse selbst zugreifen, etwa so:

Example.I  # Returns 10

Wenn Sie einen Setter für Ihre Klasseneigenschaft definieren möchten, können Sie den @classproperty.setter verwenden Dekorateur:

@I.setter
def I(cls, value):
    cls.the_I = value

Jetzt können Sie die Klasseneigenschaft direkt festlegen:

Example.I = 20  # Sets Example.the_I to 20

Alternativer Ansatz: ClassPropertyDescriptor

Wenn Sie einen flexibleren Ansatz bevorzugen, sollten Sie die Verwendung von in Betracht ziehen ClassPropertyDescriptor-Klasse. So funktioniert es:

class ClassPropertyDescriptor(object):

    def __init__(self, fget, fset=None):
        self.fget = fget
        self.fset = fset

    # ... (method definitions)

def classproperty(func):
    return ClassPropertyDescriptor(func)

Mit diesem Ansatz können Sie Klasseneigenschaften wie folgt definieren:

class Bar(object):

    _bar = 1

    @classproperty
    def bar(cls):
        return cls._bar

Sie können die Klasseneigenschaft mithilfe ihres Setters (falls definiert) oder durch Ändern des zugrunde liegenden Attributs festlegen:

Bar.bar = 50
Bar._bar = 100

Diese erweiterte Lösung bietet mehr Kontrolle und Flexibilität beim Arbeiten mit Klasseneigenschaften in Python.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3