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 でクラス プロパティを操作する際の制御性と柔軟性が向上しました。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3