Допустим, у меня есть класс, который наследуется от int
.
class Test(int):
def __init__(self, val: int, extra: str) -> None:
print("reached")
self.val = val
int.__init__(self, val)
def main():
myTest = Test(3, "hi")
print(myTest.val)
if __name__ == "__main__":
main()
Теперь я ожидаю, что мой код выведет "reached"
, потому что я вызываю конструктор для Test
. Однако я получаю следующую ошибку:
Traceback (most recent call last):
File "C:/.../Test.py", line 46, in <module>
myTest = Test(3, "hi")
TypeError: 'str' object cannot be interpreted as an integer
и "reached"
никогда не выводятся! Насколько я знаю, мой код должен вызывать функцию __init__
, которую я определил до вызова конструктора int
, но, очевидно, этого не происходит.
Похоже, что код вызывает конструктор суперкласса до того, как он вызывает мой, что я нахожу довольно странным. Это действительно то, что происходит?
Как лучше всего добавить дополнительные параметры в объявление __init__(...)
, не получая ошибок такого рода?
Прежде чем пометить это как дубликат Я знаком с подобными вопросами, но ни один из них не отвечает , почему это происходит. Кроме того, многие из них используют множественное наследование. Я пытаюсь выяснить, почему при использовании одиночного наследования примитивного типа код, по-видимому, вызывает конструктор родителя вместо того, который должен его переопределять.