Dein `name`-Attribut ist insofern nicht ganz korrekt gesetzt, weil man in den meisten Fällen ein Attribut auf Exemplar-Ebene und nicht auf der Klasse selbst nutzen möchte. Als kleine Veranschaulichung mal ein konstruiertes sinnloses Beispiel:
Code: Alles auswählen
>>> class NameManager(object):
... names = []
... def add_name(self, name):
... self.names.append(name)
...
>>> women = NameManager()
>>> women.add_name('Peggy')
>>> women.add_name('Sandra')
>>> women.names
['Peggy', 'Sandra']
>>> men = NameManager()
>>> men.add_name('Barney')
>>> men.add_name('Paul')
>>> women.names
['Peggy', 'Sandra', 'Barney', 'Paul']
Wie du siehts, führt dieser Ansatz zu vom Benutzer unerwartetem Verhalten. Abhilfe schafft Folgendes:
Code: Alles auswählen
>>> class CorrectNameManager(object):
... def __init__(self):
... self.names = []
... def add_name(self, name):
... self.names.append(name)
...
>>> women = CorrectNameManager()
>>> women.add_name('Peggy')
>>> women.add_name('Sandra')
>>> women.names
['Peggy', 'Sandra']
>>> men = CorrectNameManager()
>>> men.add_name('Barney')
>>> men.add_name('Paul')
>>> women.names
['Peggy', 'Sandra']
>>> men.names
['Barney', 'Paul']
Mit "Exemplar" ist übrigens die Art von Entität (nenn ich jetzt mal so) gemeint, die als `women` bzw `men` genutzt wird. Also nicht das Klassenobjekt an sich, sondern eben das "Ding", worauf man irgendwelche Aktionen durchführen möchte.
Und falls das Vorgehen noch nicht so ganz klar geworden sein sollte: Klassenattribute sind quasi statisch, d.h. du kannst sie im Prinzip immer ändern. Selbst so etwas ginge:
Code: Alles auswählen
>>> class Foo(object):
... bar = []
... def give_bar(self):
... return self.bar
...
>>> foo = Foo()
>>> foo.give_bar()
[]
>>> foo2 = Foo()
>>> foo2.bar.append('spam')
>>> Foo.bar.append('eggs')
>>> foo.give_bar()
['spam', 'eggs']
An Klassenattributen kann also so ziemlich jeder nach Lust und Laune rumfummeln, auch wenn beim letzten Beispiel offenkundig schon ein gewisser Vorsatz vorliegen muss. In Python verbieten wir ja bekanntlich ungerne Dinge, sondern vertrauen eher darauf, dass der Benutzer schon keinen Mist machen wird. In der Realität kann aber zumindest das Beispiel mit den Männer- und Frauennamen durchaus vorkommen und dann für entsprechende Verwirrung (oder schlimmer) sorgen. Also sowas am Besten gar nicht erst angewöhnen, außer man braucht tatsächlich ein statisches Attribut (was aber eher selten vorkommt).