[Python-de] Initialisierung einer Klasse

Georg Mischler schorsch at schorsch.com
Wed Aug 15 09:58:13 EDT 2001


Carsten Tilch wrote:

> # Python2.1.1
> # Warum ist das Dictionary, der dritten Instanz, nicht leer?
>
> class Dic:
>     def __init__(self,dic = {}):

Weil diese Zuweisung    ^^^^^^^^
waehrend der Definition der Klasse Dic evaluiert wird, was genau
einmal passiert, naemlich beim Import des betreffenden Moduls.
Die Variable dic wird danach samt Vorgabewert in der Definition
der Methode hinterlegt (gilt auch fuer normale Funktionen).
Man kann diesen "Trick" dazu verwenden, in einer Funktion
statische Variablen zu simulieren, sollte das aber nur dann
tun, wenn man sich ueber die Folgen im klaren ist... ;)


>         self.dic = dic
>     def setDic(self,key,value):
>         self.dic[key] = value
>     def getDic(self):
>         return self.dic
>
> a = Dic()
> print a.getDic()
> #gibt aus : {}
> b = Dic()
> b.setDic('key','value')
> print b.getDic()
> #gibt aus : {'key': 'value'}
> c = Dic()
> print c.getDic()
> #gibt aus : {'key': 'value'}


Was du eigentlich haben willst, ist folgendes:

class Dic:
    def __init__(self,dic=None):
		if dic == None: self.dic = {}
        else: self.dic = dic
...

Damit erzeugst du fuer jede Instanz ein seperates self.dic.
Natuerlich ist das nur dann notwendig, wenn du als Vorgabewert
ein veraenderbares Objekt verwendest.


Viel Spass!

-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/




More information about the Python-de mailing list