2017-02-23 53 views
0
class A(object): 
    name = "Class A" 

class B(A): 
    pass 
print A.__dict__ 
print B.__dict__ 

输出:为什么蟒蛇__dict__不列入继承类属性,但可以访问它

{'__dict__': <attribute '__dict__' of 'A' objects>, '__module__': '__main__', '_ 
_weakref__': <attribute '__weakref__' of 'A' objects>, 'name': 'Class A', '__doc 
__': None} 


{'__module__': '__main__', '__doc__': None} 

的Attr '名' 是不是B. 字典,但可以通过 'B.name' 访问。

print B.name 

输出:

B.name = Class A 

我仍然感到困惑什么是getattr功能和Class.__dict__之间的差异。

回答

2

B.__dict__只是直接在B上定义的东西。当您尝试访问某个属性时,会发生动态查找过程,从而尝试超类以查看哪些(如果有)属性。