Seite 1 von 1
Klassenattribut
Verfasst: Dienstag 27. Juni 2006, 23:45
von antimicro
Hi,
ich hab mal ein wenig mit Klassenattributen rumgespielt (aufmerksam durch
diesen Thread).
Code: Alles auswählen
class Bspl:
zeahler = 0
def __init__(self):
self.zeahler += 1
print "Es gibt jetzt %d Objekte der Klasse Bspl"%self.zeahler
if __name__ == "__main__":
obj1 = Bspl()
obj2 = Bspl()
Sollte nicht das Klassenattribut eben Klassenübergreifend verändert werden. Wie beispielsweise in C
Re: Klassenattribut
Verfasst: Mittwoch 28. Juni 2006, 06:08
von mitsuhiko
antimicro hat geschrieben:Sollte nicht das Klassenattribut eben Klassenübergreifend verändert werden. Wie beispielsweise in C
Nein. Aber so:
Code: Alles auswählen
class Bspl:
zeahler = 0
def __init__(self):
self.__class__.zeahler += 1
print "Es gibt jetzt %d Objekte der Klasse Bspl"%self.anzeige
if __name__ == "__main__":
obj1 = Bspl()
obj2 = Bspl()
Verfasst: Mittwoch 28. Juni 2006, 08:18
von antimicro
Aha!
Sehr schön... vielen Dank!
Verfasst: Mittwoch 28. Juni 2006, 17:23
von BlackJack
`self.__class__` ist keine gute Idee, bzw. sollte man wissen was das bei Subklassen für Auswirkungen hat:
Code: Alles auswählen
In [3]: class A(object):
...: count = 0
...: def __init__(self):
...: self.__class__.count += 1
...:
In [4]: class B(A):
...: def __init__(self):
...: A.__init__(self)
...:
In [5]: a = A()
In [6]: print A.count
1
In [7]: b = B()
In [8]: print A.count, B.count
1 2
Das ist vielleicht nicht das Ergebnis was man erwarten würde. Alternativ:
Code: Alles auswählen
In [15]: class A(object):
....: count = 0
....:
....: def __init__(self):
....: A.count += 1
....:
In [16]: class B(A):
....: def __init__(self):
....: A.__init__(self)
....:
In [17]: a = A()
In [18]: print A.count
1
In [19]: b = B()
In [20]: print A.count, B.count
2 2