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

Gerhard Häring gh at ghaering.de
Die Okt 21 12:58:33 CEST 2003


> Am Mon, 2003-10-20 um 08.57 schrieb Jan Wender:
>>On Fri, Oct 17, 2003 at 09:28:56PM +0200, Olaf Radicke wrote:
>>
>>>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. Also gebe ich jetzt jeder Objektinstanz das
>>>Objekt  "Konfig" als Parameter mit.  Und weil ich noch ein paar
>>
>>Guck Dir doch mal das Borg Pattern aus dem Python Kochbuch an (In der
>>englischen Version S. 208ff, oder auch bei ActiveState). Das kann man
>>genau dazu verwenden:
>>
>>--- borg.py
>>class Borg:
>>  _shared_state = {}
>>  def __init__(self): self.__dict__ = _shared_state
>>---
> 
> Na, ob das zur allgemeinen versändlichkeit des Codes beiträgt?

Die Implementierung des Borg-Patterns ist Deep Magic. Das muss man aber 
nur ein Mal machen und wurde ja schon gemacht. Um es verwenden zu können 
würde also so etwas wie:

from borg import Borg

class MyConfiguration(Borg): pass

völlig reichen. Ich ziehe allerdings nach wie vor die Lösung vor, Module 
als Singletons zu verwenden:

--- config.py ---
config = None

def load_config():
     # Konfiguration aus Datei laden und die Variable 'config' entspr.
     # befüllen
------------------

-- Gerhard