__repr__ Klassen benutzen wie Funktionen???
Verfasst: Mittwoch 11. August 2004, 12:56
Hallo...
Ich möchte öfters mal Klassen wie einfache Funktionen benutzen...
Dazu dachte ich, liefert mir __repr__ das Ergebniss zurück, da ja leider __init__ kein Ergebniss zurück liefern kann...
Mit __repr__ scheint es auch zu funktionieren, aber als ich zwei Aufrufe hintereinander Ausführen wollte, ist mir Aufgefallen, das __repr__ nicht einen String, sondern eine Instanz zurückliefert
Hier mal ein Beispiel:
Das Ergebniss:
Schade...
Eine Lösung ist es in der Klasse eine "get"-Funktion einzubauen... Das funktioniert auch:
Liefert das Ergebniss, so wie ich es vom ersten beispiel mit __repr__ auch erwartet habe:
Der Nachteil bei der zweiten Variante ist aber, das man halt den Aufruf mit .get() ergänzen muß...
Gibt es einen einfacheren Weg?
Ich möchte öfters mal Klassen wie einfache Funktionen benutzen...
Dazu dachte ich, liefert mir __repr__ das Ergebniss zurück, da ja leider __init__ kein Ergebniss zurück liefern kann...
Mit __repr__ scheint es auch zu funktionieren, aber als ich zwei Aufrufe hintereinander Ausführen wollte, ist mir Aufgefallen, das __repr__ nicht einen String, sondern eine Instanz zurückliefert
Hier mal ein Beispiel:
Code: Alles auswählen
class test1:
def __init__(self, text):
self.text=text
def __repr__(self):
return self.text+" test1"
class test2:
def __init__(self, text):
self.text=text
def __repr__(self):
return self.text+" & test2"
text=test1("Hello World:")
print type(text),":",text
text=test2(text)
print type(text),":",text
Code: Alles auswählen
<type 'instance'> : Hello World: test1
<type 'instance'> : Traceback (most recent call last):
File "testtemp.py", line 50, in ?
print type(text),":",text
File "testtemp.py", line 44, in __repr__
return self.text+" & test2"
TypeError: unsupported operand type(s) for +: 'instance' and 'str'
Schade...
Eine Lösung ist es in der Klasse eine "get"-Funktion einzubauen... Das funktioniert auch:
Code: Alles auswählen
class test1:
def __init__(self, text):
self.text=text
def get(self):
return self.text+" test1"
class test2:
def __init__(self, text):
self.text=text
def get(self):
return self.text+" & test2"
text=test1("Hello World:").get()
print type(text),":",text
text=test2(text).get()
print type(text),":",text
Code: Alles auswählen
<type 'str'> : Hello World: test1
<type 'str'> : Hello World: test1 & test2
Der Nachteil bei der zweiten Variante ist aber, das man halt den Aufruf mit .get() ergänzen muß...
Gibt es einen einfacheren Weg?