Python の @property デコレーターについて理解する
Python では、@property デコレーターを使用して、通常のインスタンス属性のように動作するプロパティを作成できます。ただし、引数を取る組み込みのプロパティ関数とは異なり、@property デコレータは明示的に引数を受け取りません。
仕組み
@property の仕組みを理解するにはデコレータが機能する場合は、property() 関数が記述子オブジェクトを返すことを最初に理解することが重要です。これはインスタンスとそのプロパティの間に介在し、追加のロジックを適用できるようにします。
記述子オブジェクト
プロパティによって返される記述子オブジェクト( ) 関数には 3 つの組み込み関数がありますメソッド:
デコレータを使用したプロパティの作成
@property デコレータが関数に適用されると、記述子オブジェクトが返され、それがプロパティ名に割り当てられます。 。このオブジェクトは、元の関数のゲッター関数を保持し、プロパティのセッター メソッドとデリーター メソッドに委任する 2 つの追加関数を含みます。
例:
class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x
上記のコードは、明示的なプロパティ オブジェクトを使用せずに self._x の値を取得できる "x" という名前のプロパティ。 getter 関数はデコレータによって自動的に作成されます。
Setter および Deleter デコレータ
setter メソッドと deleter メソッドを追加するには、@property に .setter と .deleter を追加するだけです。記述子オブジェクト、意図した関数を渡す:
@x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
これらを使用することによりメソッドを使用すると、プロパティ値を設定および削除するためのカスタム動作を実装できます。
実装の詳細
@property の @decorator 構文は糖衣構文です。バックグラウンドで次のコードが実行されます:
def x(self): return self._x x = property(x)
記述子の例
プロパティ記述子の純粋な Python 実装がどのように機能するかを示す例を次に示します。
class Property: def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj)
このクラスを使用すると、ゲッター、セッター、デリーターを使用してプロパティを手動で作成できます関数。
以上がPython の @property デコレーターはプロパティを作成するためにどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。