Gå til innhold

Merkelig oppførsel ved initialisering av klassevariabler


Anbefalte innlegg

Heisann, er det bare jeg som ikke helt har forstått meg på arv og klasser, eller er det noe galt med denne oppførselen:

class A():
temp = []
def __init__(self):
	self.init()

class B(A):
def init(self): self.temp.append(D('per'))

class C(A):
def init(self): self.temp.append(D('Olav'))

class D():
def __init__(self, name): self.name = name	
def __repr__(self): return '<D:%s>' % self.name

b = B()
c = C()
print b.temp
print c.temp

[<D:per>, <D:Olav>]

[<D:per>, <D:Olav>]

 

Derimot bruker jeg denne i steden for (byttet om på initialisering av temp variabelen til A):

class A():
def __init__(self):
	self.temp = []
	self.init()

class B(A):
def init(self): self.temp.append(D('per'))

class C(A):
def init(self): self.temp.append(D('Olav'))

class D():
def __init__(self, name): self.name = name	
def __repr__(self): return '<D:%s>' % self.name

b = B()
c = C()
print b.temp
print c.temp

Så blir output:

[<D:per>]

[<D:Olav>]

 

Etter mitt hode skal det ikke være noe forskjell på oppførselen til disse to scriptene. :S

Endret av Canute
Lenke til kommentar
Videoannonse
Annonse
Heisann, er det bare jeg som ikke helt har forstått meg på arv og klasser,

 

Det er du som har misforstått :)

 

class A():

temp = []

def __init__(self):

self.init()

 

Her lager du en klasse A med et [i]klasse-attributt[/i] -- Klasse-attributter er som statiske felter i feks Java. Dermed er temp-attributtet ditt [i]delt[/i] mellom de to subklassene.

 

[code]class A():

def __init__(self):

self.temp = []

self.init()

 

Her lager du en klasse A med et [i]instans-attributt[/i]. Instans-attributter er bundet til et objekt, dermed vil de to objektene av de to subklassene ha hver sin temp.

 

Les mer i Python language reference.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...