我知道python的__getattr__
是在訪問一個不存在的屬性時觸發的。Python:爲什麼訪問一個現有的屬性觸發「__getattr__」?
但在我的例子中,在c1的__init__
裏面,我創建了一個名爲name的自我屬性。訪問時,兩種訪問方式都觸發__getattr__
,因此打印出「無」。
這對我來說很奇怪。我想我的理解或我的代碼有一些問題?
$ cat n.py
class c1(object):
def __init__(s):
print 'init c1'
s.name='abc'
def __getattr__(s,name):
print "__getattr__:"+name
return None
def __setattr__(s,name,value):
print "__setattr__:"+value
def __get__(s,inst,owner):
print "__get__"
class d:
def __init__(s):
s.c=c1()
c=c1()
print c.name
o=d()
print o.c.name
$ python n.py
init c1
__setattr__:abc
__getattr__:name
None
init c1
__setattr__:abc
__getattr__:name
None
你可以看到,我定義s.name='abc'
內__init__
,但訪問時,它無法識別。
您的'__setattr__'方法不會執行任何操作,這就是爲什麼'name'屬性沒有設置的原因。 – vaultah