1. ホーム
  2. python

[解決済み] Pythonのプロパティはどのように機能するのですか?

2023-04-23 21:01:48

質問

Pythonのプロパティをうまく使っているのですが、どうしたらうまくいくのかがわかりません。クラス外のプロパティを参照すると、単に型が property :

@property
def hello(): return "Hello, world!"

hello  # <property object at 0x9870a8>

しかし、クラスの中にプロパティを入れると、動作は大きく変わります。

class Foo(object):
   @property
   def hello(self): return "Hello, world!"

Foo().hello # 'Hello, world!'

私が気づいたのは、バインドされていない Foo.hello はまだ property オブジェクトのままなので、クラスのインスタンス化が魔法をかけているのでしょう、しかし、それはどんな魔法なのでしょうか?

どのように解決するのでしょうか?

他の方が指摘されているように、ディスクリプタと呼ばれる言語機能を利用します。

を介してアクセスしたときに、実際のプロパティオブジェクトが返されるのは、クラス Foo.hello を実装していることにあります。 __get__(self, instance, owner) という特殊なメソッドを実装していることにあります。

  • ディスクリプタにアクセスする場合 インスタンス にアクセスした場合、そのインスタンスは適切な引数として渡され owner クラス で、そのインスタンスの
  • クラスを通してアクセスされる場合、次に instance は None であり、唯一の owner が渡されます。また property オブジェクトはこれを認識し self .

の他に ディスクリプタ howto のドキュメントも参照してください。 ディスクリプタの実装 ディスクリプタの起動 を言語ガイドに追加しました。