Python のクラス メソッドでプロパティ デコレーターを使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-27 12:03:11
オリジナル
114 人が閲覧しました

How Can I Use Property Decorators with Class Methods in Python?

クラス メソッドでのプロパティ デコレータの使用 (classmethod)

Python の property() デコレータを使用すると、クラスのプロパティを定義でき、特定のプロパティへのアクセスが可能になります。属性。ただし、@classmethod を使用してクラス メソッドとしてマークされたメソッドで property() デコレータを使用する場合、クラスメソッドはインスタンスで呼び出すことができないため、問題が発生します。

Python 2 および Python 3 (3.9 ~ 3.10 を含む) の解決策

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 以降の代替メソッド

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート