1

オブジェクトの属性を取得したいとします: smth = object.attr. また、属性がどのオブジェクトにあるかが既にわかっているとします。それを A というクラスとします。

私の知る限り、属性取得手順は次のようになります。

attr = A.__dict__['attr']      # 1
if hasattr(attr, '__get__'):   # 2
    return attr.__get__(None, A)
else: 
    return attr
  1. クラス A の属性ディクショナリで記述子を見つけます。
  2. 属性のゲッターが存在する場合は、その出力を返します。それ以外の場合は、属性自体を返します。

ここに問題があります。属性がゲッターを持つ記述子であるとします。その場合、 を解決するobject.descriptordescriptor.__get__は、非データ記述子 (関数) を解決する必要があり、これも解決する必要があります。この再帰の終わりはどこですか?

4

0 に答える 0