- 论坛徽章:
- 1
|
python的__getattr__是在不存在某个属性的时候掉用的。但是如果已经存在了某个属性,为什么还会触发呢?
我有下面一个小例子。class c1里面的__init__创建了self的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
复制代码 可以看到c1的__init__函数里面创建了s.name='abc',为什么访问的时候不认? __get__函数也没有被调用啊
|
|