Переопределяющий конструктор в классе python, который наследуется от примитивного типа - PullRequest
0 голосов
/ 25 апреля 2020

Допустим, у меня есть класс, который наследуется от 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__(...), не получая ошибок такого рода?

Прежде чем пометить это как дубликат Я знаком с подобными вопросами, но ни один из них не отвечает , почему это происходит. Кроме того, многие из них используют множественное наследование. Я пытаюсь выяснить, почему при использовании одиночного наследования примитивного типа код, по-видимому, вызывает конструктор родителя вместо того, который должен его переопределять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...