Python でクラス プロパティを定義する方法
Python では、@classmethod デコレータを使用してクラスにメソッドを追加できます。しかし、クラス プロパティを定義するための同様のメカニズムはありますか?
そうですね。 Python は、この目的のために @classproperty デコレータを提供します。その構文と使用法は、@classmethod の構文と使用法によく似ています。
class Example(object): the_I = 10 @classproperty def I(cls): return cls.the_I
@classproperty デコレーターは、I という名前のクラス プロパティを作成します。次のように、クラス自体でこのプロパティに直接アクセスできます。
Example.I # Returns 10
クラス プロパティのセッターを定義したい場合は、@classproperty.setter デコレータを使用できます:
@I.setter def I(cls, value): cls.the_I = value
これで、クラス プロパティを直接設定できるようになります:
Example.I = 20 # Sets Example.the_I to 20
代替アプローチ: ClassPropertyDescriptor
より柔軟なアプローチを希望する場合は、ClassPropertyDescriptor クラスの使用を検討してください。その仕組みは次のとおりです:
class ClassPropertyDescriptor(object): def __init__(self, fget, fset=None): self.fget = fget self.fset = fset # ... (method definitions) def classproperty(func): return ClassPropertyDescriptor(func)
このアプローチでは、次のようにクラス プロパティを定義できます。
class Bar(object): _bar = 1 @classproperty def bar(cls): return cls._bar
クラス プロパティは、セッター (定義されている場合) を使用するか、次のように設定できます。基礎となる属性の変更:
Bar.bar = 50 Bar._bar = 100
この拡張されたソリューションにより、Python でクラス プロパティを操作する際の制御と柔軟性が向上します。
以上がPython でクラス プロパティを定義する方法: @classmethod に似た @classproperty デコレーターはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。