Por que meu variável de instância não em __dict__?

votos
31

Se eu criar uma classe Ada seguinte forma:

class A:
    def __init__(self):
        self.name = 'A'

Inspecionar o __dict__membro parece{'name': 'A'}

Se, no entanto eu criar uma classe B:

class B:
    name = 'B'

__dict__ está vazia.

Qual é a diferença entre os dois, e por que não nameaparecer em B's __dict__?

Publicado 30/08/2008 em 10:12
fonte usuário
Em outras línguas...                            


2 respostas

votos
43

B.nameé um atributo de classe, não um atributo de instância. Ele mostra-se em B.__dict__, mas não em b = B(); b.__dict__.

A distinção é obscurecida um pouco porque quando você acessar um atributo em uma instância, o dict classe é um fallback. Assim, no exemplo acima, b.nameirá dar-lhe o valor de B.name.

Respondeu 30/08/2008 em 10:33
fonte usuário

votos
12
class A:
    def _ _init_ _(self):
        self.name = 'A'
a = A()

Cria um atributo na instância de objecto uma do tipo A e que pode, portanto, ser encontrada em: a.__dict__

class B:
    name = 'B'
b = B()

Cria um atributo na classe B e o atributo pode ser encontrado em B.__dict__alternativa, se você tiver uma instância b do tipo B você pode ver o nível de classe atributosb.__class__.__dict__

Respondeu 02/09/2008 em 16:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more