__get__ と __set__ および Python 記述子を理解する 質問する

__get__ と __set__ および Python 記述子を理解する 質問する

私はPython の記述子とは何か、そしてそれが何に役立つのかを理解しようとしています。その仕組みは理解していますが、疑問があります。次のコードを考えてみましょう。

class Celsius(object):
    def __init__(self, value=0.0):
        self.value = float(value)
    def __get__(self, instance, owner):
        return self.value
    def __set__(self, instance, value):
        self.value = float(value)


class Temperature(object):
    celsius = Celsius()
  1. 記述子クラスが必要なのはなぜですか?

  2. instanceここでととは何ですかowner? ( 内__get__)。これらのパラメータの目的は何ですか?

  3. この例をどのように呼び出し/使用すればよいでしょうか?

ベストアンサー1

記述子は、Python のproperty型が実装される方法です。記述子は、 、 などを単純に実装し__get____set__その定義で別のクラスに追加されます (上記の Temperature クラスの場合のように)。例:

temp=Temperature()
temp.celsius #calls celsius.__get__

記述子を割り当てたプロパティ (celsius上記の例) にアクセスすると、適切な記述子メソッドが呼び出されます。

instance__get__クラスのインスタンスです (したがって、上記では__get__は を受け取りますtempが、 はowner記述子を持つクラスです (したがって となりますTemperature)。

記述子クラスを使用して、それを動かすロジックをカプセル化する必要があります。こうすることで、記述子が (たとえば) 何らかの高価な操作をキャッシュするために使用されている場合、記述子はクラスではなく、記述子自体に値を保存できます。

公式のPythonドキュメントには、記述子に関する記事いくつかの例を挙げて、それらがどのように機能するかを詳しく説明します。

編集: jchl がコメントで指摘したように、 を単に試すとTemperature.celsiusinstanceになりますNone

おすすめ記事