Seite 1 von 1

Eine Verständnisfrage zur OOP (Klassenattribute)

Verfasst: Samstag 25. August 2007, 18:07
von alan
Hallo,

arbeite mich gerade durch Dive Into Python durch, und bin da in Kapitel 5.8 (Introducing class attributes) hängen geblieben:

Code: Alles auswählen

class counter:
	count = 0
	def __init__(self):
		self.__class__.count += 1

>>> c = counter()
>>> d = counter()
>>> c.count
2
>>> counter.count
2
>>> c.count = 13
>>> d.count
2 # Wieso nicht 13?
>>> counter.count
2
>>> e = counter()
>>> c.count
13
Was ich nicht verstehe:
Dive Into Python schreibt "notice how the class attribute is shared by the class and all instances of the class".

Wieso ändert sich dieses Verhalten, sobald ich von außerhalb das Klassenattribut ändere (c.count=13)?

Bis dahin schien es so, als ob counter.count, c.count und e.count nur unterschiedliche Namen für das selbe Objekt wären (bzw. so habe ich mir Klassenattribute vorgestellt), aber das stimmt offensichtlich nicht?

Re: Eine Verständnisfrage zur OOP (Klassenattribute)

Verfasst: Samstag 25. August 2007, 19:32
von Leonidas
alan hat geschrieben:Wieso ändert sich dieses Verhalten, sobald ich von außerhalb das Klassenattribut ändere (c.count=13)?
Weil du das Klassenattribut mit einem Instanzattribut überschreibst, welches per ``self.counter`` innerhalb der Klasse zu erreichen ist.

Wundert dich dieses Verhalten:

Code: Alles auswählen

class Counter(object): pass
c = Counter()
c.count = 42
print c.counter
Nein, oder? Siehst du, das ist bewirkt das gleiche - ein Attribut wird an eine Klasseninstanz gehängt.

Verfasst: Samstag 25. August 2007, 23:57
von alan
Danke :-) habs verstanden