Hallo,
ich hätte mal eine Verständnisfrage. Man kann ja in Klassen eine Variable mit:
a = ...
oder auch
self.a = ...
definieren.
Wo liegt denn der Unterschied? Kann man nur die mit self definierten von außen ansprechen und die anderen nicht verändern ist das richtig?
Variablen in Klassen
Für die Beantwortung solcher Fragen ist der interaktive Python-Interpreter sehr
praktisch:
Der Unterschied zwischen den beiden Varianten ist, dass man mit der ersten Klassenattribute erzeugt, während sich das mit 'self' angelegte Attribut auf die jeweilige Instanz bezieht. Verändern und ansprachen kann man bei. Aber Klassenattribute werden von allen Instanzen geteilt, was am Besten bei veränderbaren Datenypen wie Listen (muteables) sehen kann. Instanzattribute sind exklusiv für ein konkretes Objekt, das mittels einer Klasse erzeugt wurde.
praktisch:
Code: Alles auswählen
In [1]: class Test:
...: a = list()
...: def __init__(self):
...: self.b = list()
...:
In [2]: first = Test()
In [3]: second = Test()
In [4]: dir(first)
Out[4]:
['__class__',
...
'a',
'b']
In [5]: first.a
Out[5]: []
In [6]: second.a
Out[6]: []
In [7]: first.a.append(1)
In [8]: first.a
Out[8]: [1]
In [9]: second.a
Out[9]: [1]
In [10]: first.b
Out[10]: []
In [11]: first.b.append(2)
In [12]: first.b
Out[12]: [2]
In [13]: second.b
Out[13]: []