Приведен следующий пример:
class Foo(object):
def __init__(self, value=0):
self.value=value
def __int__(self):
return self.value
Я хочу иметь класс Foo , который действует как целое число (или число с плавающей точкой). Поэтому я хочу сделать следующие вещи:
f=Foo(3)
print int(f)+5 # is working
print f+5 # TypeError: unsupported operand type(s) for +: 'Foo' and 'int'
Первый оператор print int(f)+5
работает, потому что есть два целых числа. Второй сбой, потому что мне нужно реализовать __add__
, чтобы выполнить эту операцию с моим классом.
Итак, чтобы реализовать целочисленное поведение, я должен реализовать все методы целочисленной эмуляции. Как я мог обойти это. Я пытался унаследовать от int
, но эта попытка не удалась.
Обновление
Наследование от int
завершается неудачно, если вы хотите использовать __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)
Если вы затем позвоните:
f=Foo(some_argument=3)
вы получите:
TypeError: 'some_argument' is an invalid keyword argument for this function
Протестировано с Python 2.5 и 2.6