Python の property() デコレータを使用すると、クラスのプロパティを定義でき、特定のプロパティへのアクセスが可能になります。属性。ただし、@classmethod を使用してクラス メソッドとしてマークされたメソッドで property() デコレータを使用する場合、クラスメソッドはインスタンスで呼び出すことができないため、問題が発生します。
Python のプロパティはクラスではなくインスタンスで動作するため、メタクラスを使用して回避策を実装できます。 Python では、メタクラスはクラスを動的に作成する役割を果たし、クラス自体にプロパティを追加するために利用できます。わずかに変更されたコード スニペットを次に示します。
class foo(object): _var = 5 class __metaclass__(type): # Metaclass definition (Python 2 syntax) @property def var(cls): return cls._var @var.setter def var(cls, value): cls._var = value # Access and modify the class-level property using the class name foo.var # Get the initial value foo.var = 3 # Set the value
メタクラス内でプロパティを定義すると、クラス自体に影響を与え、クラス名を介してアクセスできるクラスレベルのプロパティを所有できるようになります。
Python バージョン 3.8 以降では、@classmethod デコレータは次のことができます。 property() デコレータと組み合わせて使用します。次のコード スニペットは次のことを示しています。
class Foo(object): _var = 5 @classmethod @property def var(cls): return cls._var @var.setter @classmethod def var(cls, value): cls._var = value # Access and modify the class-level property using the class name Foo.var # Get the initial value Foo.var = 3 # Set the value
この場合、@classmethod と @property デコレータの両方を同じメソッドに適用でき、クラス メソッドを使用してクラス レベルのプロパティを定義できます。
以上がPython のクラス メソッドでプロパティ デコレーターを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。