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.
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