Canute Skrevet 22. februar 2008 Skrevet 22. februar 2008 (endret) 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 22. februar 2008 av Canute
steingrim Skrevet 22. februar 2008 Skrevet 22. februar 2008 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.
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå