質問に:
記述子をインスタンス属性にできないのはなぜですか?
次のように回答されています。
記述子オブジェクトは、インスタンスではなくクラスに存在する必要があります
__getattribute__
それが実装されている方法だからです。
簡単な例。記述子を考えてみましょう:
class Prop(object):
def __get__(self, obj, objtype=None):
if obj is None:
return self
return obj._value * obj._multiplier
def __set__(self, obj, value):
if obj is None:
return self
obj._value = value
class Obj(object):
val = Prop()
def __init__(self):
self._value = 1
self._multiplier = 0
各 obj に複数の Prop がある場合を考えてみましょう。値と乗数を識別するために一意の名前を使用する必要があります (ここのように。インスタンスごとの記述子オブジェクトを使用すると、記述子自体に_multiplier
(および) を格納でき、_value
いくつかのこと。
インスタンス記述子属性ごとに実装するには、次のいずれかを行う必要があります。
同様の質問が以前に提起されたことは承知していますが、本当の説明は見つかりませんでした。
- なぜPythonはこのように設計されているのですか?
- 記述子が必要とするが、インスタンスごとに情報を保存するための推奨される方法は何ですか?