私は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()
記述子クラスが必要なのはなぜですか?
instance
ここでととは何ですかowner
? ( 内__get__
)。これらのパラメータの目的は何ですか?この例をどのように呼び出し/使用すればよいでしょうか?
ベストアンサー1
記述子は、Python のproperty
型が実装される方法です。記述子は、 、 などを単純に実装し__get__
、__set__
その定義で別のクラスに追加されます (上記の Temperature クラスの場合のように)。例:
temp=Temperature()
temp.celsius #calls celsius.__get__
記述子を割り当てたプロパティ (celsius
上記の例) にアクセスすると、適切な記述子メソッドが呼び出されます。
instance
は__get__
クラスのインスタンスです (したがって、上記では__get__
は を受け取りますtemp
が、 はowner
記述子を持つクラスです (したがって となりますTemperature
)。
記述子クラスを使用して、それを動かすロジックをカプセル化する必要があります。こうすることで、記述子が (たとえば) 何らかの高価な操作をキャッシュするために使用されている場合、記述子はクラスではなく、記述子自体に値を保存できます。
公式のPythonドキュメントには、記述子に関する記事いくつかの例を挙げて、それらがどのように機能するかを詳しく説明します。
編集: jchl がコメントで指摘したように、 を単に試すとTemperature.celsius
、instance
になりますNone
。