Werte innerhalb einer Objekthierachie vererben

08/07/2009 - 22:43 von Florian Lindner | Report spam
Hallo,

ich will folgendes in Python modellieren.

Ein Geràt, welches sich aus Komponenten zusammensetzt:

class Geràt:
XKomponente x
YKomponente y
ZKomponente z

Spannung = 230
Frequenz = 50

class XKomponente:
class YKomponente:
class ZKomponente:

Geràt g()
g.x = XKomponente

Nun soll x auf einige Werte, z.B. Spannung und Frequenz des Geràtes
zugreifen können oder auch für sich selber neu definieren.

XKompoenente soll nicht von Geràt erben im OOP-Sinne, da sie von der
Implementierung und Interface komplett verschieden sind. Es soll von
Geràt aber quasi eine Art Umwelt bzw. Umgebungsbedingungen übernommen
werden.

Das könnte ich natürlich so machen:

class Geràt:
@property
def x(self, val):
val.Spannung = self.Spannung
[... usw. ...]
self.komponente_x = val


Aber ich frage mich, ob das auch irgendwie eleganter geht?

Wie kann ich das in Python machen? Da ich ja vermutlich nicht der erste
bin, der so etwas will: Wie heißt dieses Schema / Paradigma?

Danke & Grüße,

Florian
 

Lesen sie die antworten

#1 Diez B. Roggisch
08/07/2009 - 22:59 | Warnen spam
Florian Lindner schrieb:
Hallo,

ich will folgendes in Python modellieren.

Ein Geràt, welches sich aus Komponenten zusammensetzt:

class Geràt:
XKomponente x
YKomponente y
ZKomponente z

Spannung = 230
Frequenz = 50

class XKomponente:
class YKomponente:
class ZKomponente:

Geràt g()
g.x = XKomponente

Nun soll x auf einige Werte, z.B. Spannung und Frequenz des Geràtes
zugreifen können oder auch für sich selber neu definieren.

XKompoenente soll nicht von Geràt erben im OOP-Sinne, da sie von der
Implementierung und Interface komplett verschieden sind. Es soll von
Geràt aber quasi eine Art Umwelt bzw. Umgebungsbedingungen übernommen
werden.

Das könnte ich natürlich so machen:

class Geràt:
@property
def x(self, val):
val.Spannung = self.Spannung
[... usw. ...]
self.komponente_x = val


Aber ich frage mich, ob das auch irgendwie eleganter geht?

Wie kann ich das in Python machen? Da ich ja vermutlich nicht der erste
bin, der so etwas will: Wie heißt dieses Schema / Paradigma?



Du koenntest etwas dieser Art machen:

class Delegator(object):

def __init__(self, delegate):
self.delegat = delegate


def __getattr__(self, name):
if hasattr(self, name):
return getattr(self, name)
return getattr(self.delegate, name)


class XKomponente(Delegator):


Frequenz = 100

def __init__(self, geraet):
Delegator.__init__(self, geraet)



Diez

Ähnliche fragen