[Python-de] Vererbung und globale Objekte (war "socket")

holger krekel hpk at trillke.net
Sam Okt 18 00:48:33 CEST 2003


[Olaf Radicke Fri, Oct 17, 2003 at 09:28:56PM +0200]
> Ich habe jetzt ein etwas größeres  Projekt in Python angefangen.
> Eine ganze reihe von Objekten brauchen die gleichen Informationen
> Z.B. die die Daten aus der Konfigurationsdatei. Jetzt habe ich
> ein Objekt "Konfig" als global angelegt. Aber die anderen Objekte
> kennen es trotzdem nicht, weil ihre Klassendefinition in einer 
> anderen Datei steht. 

normalerweise kannst du ein 'config.py' (z.B.) module machen, das dann
deine Parameter enthaelt.  

und dann kannst du das von jedem anderen Modul bekommen mit

    from config import some_config_var 

so dass du 'config' nicht ueberall herumreichen musst.  

Jedes Modul wird nur einmal wirklich importiert, d.h. exekutiert.  Alle
nachfolgenden Imports bekommen das bereits intialisierte Modul (also
immer dasselbe!) sofort, ohne ein erneutes Exekutieren des Modulcodes
auszulösen.  Importieren ist dann im Prinzip nur eine Dictionary
Operation (und zwar auf das 'sys.modules' dictionary, das Namen auf
Modulobjekte abbildet). 

> Also gebe ich jetzt jeder Objektinstanz das
> Objekt  "Konfig" als Parameter mit.  Und weil ich noch ein paar
> globale Objekte mehr habe, wird die Liste immer länger. Manchmal
> braucht ein Objekt gar nicht das Objekt  "Konfig" sondern in dem
> Objekt wird eine weitere Instanz eines Objektes angelegt was
> das globale Objekt braucht. 
> 
> Ich weiß Globale Variablen/Objekte sind zu vermeiden, aber
> bei einem Objekt "Konfig" währe es schon sinnvoll.

im grunde vermeidest du mit dieser (in der tat aufwendigen) Strategie
globable Variablen.  Der oben beschriebene Mechanismus ist dagegen eine
Globale-Variablen technik.  Es gibt allerdings in Python keine wirklich
globalen Variablen, nur Modul-Globale Variablen.

gruss,

    holger