Dada es el ejemplo siguiente:Clase Python con emulación de número entero
class Foo(object):
def __init__(self, value=0):
self.value=value
def __int__(self):
return self.value
Quiero tener una clase Foo, que actúa como un número entero (o flotar). Por eso quiero hacer las siguientes cosas:
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
La primera declaración print int(f)+5
está trabajando, porque hay dos números enteros. El segundo está fallando, porque tengo que implementar __add__
para hacer esta operación con mi clase.
Para implementar el comportamiento de entero, tengo que implementar todos los métodos de emulación de enteros. ¿Cómo podría evitar esto? Traté de heredar de int
, pero este intento no fue exitoso.
actualización
Heredar de int
falla, si se desea utilizar un __init__
:
class Foo(int):
def __init__(self, some_argument=None, value=0):
self.value=value
# do some stuff
def __int__(self):
return int(self.value)
Si a continuación, llama a:
f=Foo(some_argument=3)
que se obtiene:
TypeError: 'some_argument' is an invalid keyword argument for this function
probado con Python 2.5 y 2.6
No entiendo su pregunta. ¿Cómo puede evitar una cosa que tiene que hacer para no hacer lo único que tiene que hacer? Fishslap! –
Quiero que una clase actúe como un entero. Las implementaciones para enteros reales siempre son las mismas, entonces, ¿por qué implementarlas cada vez que las usa? El método __add__ tiene sentido cuando usas el operador '+' para todo lo que no sea una adición real. –