質問:
property() 関数を併用することは可能ですか? @classmethod で修飾された関数デコレータ?
答え:
Python 3.8 以降:
Python 3.8 以前の場合、推奨される解決策は次のとおりです。プロパティはクラスではなくインスタンスで動作するため、クラスではなくメタクラスでプロパティを作成します。以下に例を示します:
class Foo(object): _var = 5 class __metaclass__(type): # Python 2 syntax for metaclasses def var(cls): return cls._var def var(cls, value): cls._var = value # Python 3 syntax for metaclasses class Meta(type): ... class Foo(metaclass=Meta): ...
Python 3.9 以降:
Python 3.9 以降では、@classmethod と @property デコレーターの両方を組み合わせて使用できます。以下に例を示します。
class Foo(object): _var = 5 @classmethod @property def var(cls): return cls._var @var.setter def var(cls, value): cls._var = value
この例では、プロパティ メソッドはクラス自体に作成されます。
以上がクラスメソッドはPythonのプロパティを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。