est donné l'exemple suivant:classe Python avec émulation entier
class Foo(object):
def __init__(self, value=0):
self.value=value
def __int__(self):
return self.value
Je veux avoir une classe Foo, qui agit comme un entier (ou flottant). Donc, je veux faire les choses suivantes:
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
La première déclaration print int(f)+5
travaille, parce que il y a deux entiers. Le second est en train d'échouer, car je dois implémenter __add__
pour faire cette opération avec ma classe. Donc, pour implémenter le comportement entier, je dois implémenter toutes les méthodes d'émulation d'entier. Comment pourrais-je contourner cela. J'ai essayé d'hériter de int
, mais cette tentative n'a pas réussi.
Mise à jour
Héritant de int
échoue, si vous souhaitez utiliser 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 vous appelez ensuite:
f=Foo(some_argument=3)
vous obtenez:
TypeError: 'some_argument' is an invalid keyword argument for this function
testé avec Python 2.5 et 2.6
Je ne comprends pas votre question. Comment pouvez-vous contourner la seule chose que vous devez faire pour ne pas faire la seule chose que vous avez à faire? Fishslap! –
Je veux que la classe agisse comme un nombre entier. Les implémentations pour les entiers réels sont toujours les mêmes, alors pourquoi l'implémenter chaque fois que vous l'utilisez. La méthode __add__ a du sens lorsque vous utilisez l'opérateur '+' pour tout autre chose qu'une addition réelle. –