2017-02-23 21 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} 

«Имя» атр не было в Б. ДИКТ, но может получить доступ с помощью «B.name».

print B.name 

выход:

B.name = Class A 

Я до сих пор путают, что разница между getattr функции и Class.__dict__.

ответ

2

B.__dict__ это только вещи, определенные непосредственно на B. Когда вы пытаетесь получить доступ к атрибуту, происходит процесс динамического поиска, в котором суперклассы проверяются, чтобы увидеть, какой (если есть) атрибут.

Смежные вопросы