Hallo zusammen,
ich möchte einer generischen Klasse abhängig von einem Initialisierungsparameter eine Elternklasse zuweisen. Ich stelle mir vor, dass die Klasse "MeinHaustier" in Abhängigkeit von einem Parameter bei der Instanziierung Fido=MeinHaustier("Hund") eben von der Klasse "Hund" erbt, für MeinHaustier("Katze") von der Klasse "Katze" usw. ... geht so was überhaupt?
Freue mich auf Eure Kritik, Anmerkungen usw.
Poseidonius
Elternklasse zur Laufzeit festlegen
Ich glaube, was du hier willst ist nicht eine abhaengige Elternklasse. Dein Beispiel gibt das ja auch nicht her: Katze & Hund sind Haustiere, also ist Haustier die Basisklasse - nicht umgekehrt.
Fuer mich hoert sich das nach einem factory-Pattern an, welches in Python in verschiedenen Weisen geloest werden kann. ZB mit der __new__-methode.
Fuer mich hoert sich das nach einem factory-Pattern an, welches in Python in verschiedenen Weisen geloest werden kann. ZB mit der __new__-methode.
Code: Alles auswählen
class Haustier(object):
def __new__(cls, art):
if art == "Hund":
cls = Hund
elif art == "Katze":
cls = Katze
else:
raise Exception("Unbekanntes Haustier! Angst bekommen!")
return object.__new__(cls)
class Hund(Haustier):
pass
class Katze(Haustier):
pass
print type(Haustier("Hund"))
print type(Haustier("Katze"))
print type(Haustier("Maus"))
-
- User
- Beiträge: 63
- Registriert: Montag 23. Januar 2006, 08:58
Cool ! Genau das, was ich brauchte ... und einen schneiden Bezeichner obendrauf "factory-pattern"!
Tausend Dank für die schnelle Antwort an deets!
Grüße
Poseidonius
Tausend Dank für die schnelle Antwort an deets!
Grüße
Poseidonius
Und so spart man sich noch die lästige Fallunterscheidung

Code: Alles auswählen
class Haustier(object):
def __new__(cls, art):
klasse = [i for i in HaustierType.__subclasses__() if i.__name__ == art]
if klasse:
return HaustierType.__new__(klasse[0])
else:
raise Exception("Unbekanntes Haustier! Angst bekommen!")
class HaustierType(object):
pass
class Hund(HaustierType):
pass
class Katze(HaustierType):
pass
print type(Haustier("Hund"))
print type(Haustier("Katze"))
print type(Haustier("Maus"))