Почему моя переменная экземпляра не находится в __dict__?
Если я создам класс A
следующим образом:
class A:
def __init__(self):
self.name = 'A'
Проверка элемента __dict__
выглядит как {'name': 'A'}
Если я создаю класс B
:
class B:
name = 'B'
__dict__
пуст.
В чем разница между ними и почему не name
отображается в B
__dict__
?
Ответы
Ответ 1
B.name
- это атрибут класса, а не атрибут экземпляра. Он отображается в B.__dict__
, но не в b = B(); b.__dict__
.
Различие несколько затенено, потому что, когда вы получаете доступ к атрибуту экземпляра, класс dict является резервным. Итак, в приведенном выше примере B.name
даст вам значение B.name
.
Ответ 2
class A:
def _ _init_ _(self):
self.name = 'A'
a = A()
Создает атрибут экземпляра объекта a типа A, поэтому его можно найти в: a.__dict__
class B:
name = 'B'
b = B()
Создает атрибут класса B, и атрибут может быть найден в B.__dict__
, альтернативно, если у вас есть экземпляр b типа B, вы можете увидеть атрибуты уровня класса в b.__class__.__dict__