Dato è il seguente esempio:pitone Classe con emulazione intero
class Foo(object):
def __init__(self, value=0):
self.value=value
def __int__(self):
return self.value
voglio avere una classe Foo, che agisce come un intero (o float). Quindi voglio fare le seguenti cose:
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
La prima affermazione print int(f)+5
sta lavorando, perche 'ci sono due numeri interi. Il secondo sta fallendo, perché devo implementare __add__
per fare questa operazione con la mia classe.
Quindi per implementare il comportamento intero, devo implementare tutti i metodi di emulazione interi. Come potrei aggirare questo. Ho provato ad ereditare da int
, ma questo tentativo non ha avuto successo.
Aggiornamento
Ereditando da int
fallisce, se si desidera utilizzare 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)
Se poi si chiama:
f=Foo(some_argument=3)
si ottiene:
testato con Python 2.5 e 2.6
Non capisco la tua domanda. Come puoi aggirare l'unica cosa che devi fare per non fare l'unica cosa che devi fare? Fishslap! –
Voglio un atto di classe come un numero intero. Le implementazioni per i numeri interi reali sono sempre le stesse, quindi perché implementarle ogni volta che la si utilizza. Il metodo __add__ ha senso quando si utilizza l'operatore '+' - per tutto ciò che non è un'aggiunta reale. –