В Python 3.4 я хотел бы создать подкласс float — что-то, что можно использовать в математических и логических операциях, таких как float, но имеет другие пользовательские функции и может получать аргумент при инициализации, который управляет этой функциональностью. (В частности, я хотел иметь собственный __str__ и параметр, используемый в этом методе.)
Однако я не могу получить подкласс float, чтобы иметь функциональный конструктор с двумя аргументами. Почему? Это просто ограничение на расширение встроенных типов?
Пример:
Код: Выделить всё
class Foo(float):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Теперь, если я попробую Foo(1,2), я получу:
Код: Выделить всё
TypeError: float() takes at most 1 argument (2 given)
Удивительно, но аргументы моего нового __init__ также применяются, поэтому, если я выполню Foo(1), я получу:
Код: Выделить всё
TypeError: __init__() missing 1 required positional argument: 'extra'
В чем тут дело? Я проделал подобное с подтипами списка и был удивлен, что это не сработало с плавающей запятой.