Seite 1 von 1

Variablen in Klassen

Verfasst: Freitag 28. Dezember 2018, 13:35
von onkelhamu
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?

Re: Variablen in Klassen

Verfasst: Freitag 28. Dezember 2018, 13:55
von nezzcarth
Für die Beantwortung solcher Fragen ist der interaktive Python-Interpreter sehr
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]: []
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.

Re: Variablen in Klassen

Verfasst: Freitag 28. Dezember 2018, 18:24
von onkelhamu
Au! Danke!
Hätt nen bösen Fehler geben können