Hvorfor er min instansvariabel ikke i __dict__?

stemmer
32

Hvis jeg lage en klasse Asom følger:

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

Kontroll av __dict__medlem ser ut{'name': 'A'}

Hvis men jeg lage en klasse B:

class B:
    name = 'B'

__dict__ er tom.

Hva er forskjellen mellom de to, og hvorfor ikke namedukker opp i B's __dict__?

Publisert på 30/08/2008 klokken 09:12
kilden bruker
På andre språk...                            


2 svar

stemmer
44

B.nameer en klasse attributt, ikke et eksempel attributt. Det viser seg i B.__dict__, men ikke i b = B(); b.__dict__.

Skillet er skjult noe fordi når du åpner et attributt på en forekomst, er klassen dict en fallback. Så i eksempelet ovenfor, b.namevil gi deg verdien av B.name.

Svarte 30/08/2008 kl. 09:33
kilden bruker

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

Skaper et attributt på gjenstanden eksempelvis en av type A, og det kan derfor finnes i: a.__dict__

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

Oppretter et attributt på klasse B og attributtet kan finnes i B.__dict__alternativt hvis du har en forekomst b av type B kan du se klassenivå attributter ib.__class__.__dict__

Svarte 02/09/2008 kl. 15:12
kilden bruker

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