クラスの構築でデータ記述子を使用しているときに、クラスのgetattr関数の異常な動作が発生しました。 RHSはString
のインスタンスを返しながらデータ記述子を持つクラスのgetattrの使用
# this is a data descriptor
class String(object):
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
# This defines a class A with 'dot' notation support for attribute 'a'
class A(object):
a = String()
obj = A()
assert getattr(A, 'a') is A.__dict__['a']
# This raises AssertionError
LHSは、空の文字列を返します。オブジェクト上のgetattr
は、__dict__
の中のキーの値を取得することだと思いました。 getattr
関数はクラスオブジェクトに対してどのように機能しますか?
「None」ではなく空の文字列を返してもよろしいですか? – Bakuriu
* LHSは空の文字列を返す*確かに?私が試しているように、 'None'を返します。それはどうしていけないのですか?あなたはディスクリプタでそう言います! – glglgl
BTW: 'A.a'は**ではありません**' A .__ dict __ ['a'] 'と同じです。最初のものだけが「属性メカニズム全体」をトリガします。 – Bakuriu