Найти - Пользователи
Полная версия: Атрибуты класса
Начало » Python для новичков » Атрибуты класса
1
vkopey
# -*- coding: utf-8 -*-
class A:
    a=0
class B(A):
    b=0
A.a=1
print A.__dict__
print B.__dict__ # почему здесь нет 'a' ?
print dir(B) # а здесь 'a' есть
print B.a # почему a=1 ?
reclosedev
vkopey
print B.__dict__ # почему здесь нет ‘a’ ?
Потому что a - это атрибут класса A и его нет в B.__dict__.
vkopey
print dir(B) # а здесь ‘a’ есть
print B.a # почему a=1 ?
Атрибуты базовых классов берутся в порядке MRO.
Т.е. в классах старого стиля есть атрибут __bases__, в новых классах (унаследованных от object) есть __mro__. Если атрибут не нашелся в B, они ищется выше по иерархии.

Еще:
B.a = 2 # теперь B.a - атрибут B
print A.a # 1
print B.__dict__ # {... 'a': 2}
# и присваивание атрибуту базового класса значения
A.a = 3
# не влияет на B
print B.a # 2

Вот еще для размышлений о затенении атрибутов класса атрибутами экземпляра: http://stackoverflow.com/a/69067/1052325
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB