Gegeben ist das folgende Beispiel:Python-Klasse mit Integer-Emulation
class Foo(object):
def __init__(self, value=0):
self.value=value
def __int__(self):
return self.value
ich eine Klasse Foo, haben will, die als eine ganze Zahl handelt (oder float). Deshalb möchte ich die folgenden Dinge tun:
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
Die erste Anweisung print int(f)+5
arbeitet, weil es zwei ganzen Zahlen. Die zweite ist fehlerhaft, weil ich __add__
implementieren muss, um diese Operation mit meiner Klasse zu machen.
Um das Integer-Verhalten zu implementieren, muss ich alle Integer-Emulationsmethoden implementieren. Wie könnte ich das umgehen? Ich habe versucht, von int
zu erben, aber dieser Versuch war nicht erfolgreich.
aktualisieren
von int
Vererben fehlschlägt, wenn Sie ein __init__
verwenden möchten:
class Foo(int):
def __init__(self, some_argument=None, value=0):
self.value=value
# do some stuff
def __int__(self):
return int(self.value)
Wenn Sie rufen:
f=Foo(some_argument=3)
Sie erhalten:
TypeError: 'some_argument' is an invalid keyword argument for this function
mit Python 2.5 und 2.6 getestet
Ich verstehe Ihre Frage nicht. Wie kommst du um die eine Sache herum, die du tun musst, um nicht die eine Sache zu tun, die du tun musst? Fischlawine! –
Ich möchte eine Klasse wie eine ganze Zahl handeln. Die Implementierungen für echte Ganzzahlen sind immer gleich, also warum implementieren Sie sie bei jeder Verwendung. Die Methode __add__ macht Sinn, wenn Sie den Operator '+' für alles andere als eine echte Addition verwenden. –