У меня есть базовый класс с подсказкой типа float
при возврате метода.
В дочернем классе, не переопределяя сигнатуру, могу ли я как-то обновить подсказку типа при возврате метода, чтобы она была int
?
Пример кода
#!/usr/bin/env python3.6
class SomeClass:
"""This class's some_method will return float."""
RET_TYPE = float
def some_method(self, some_input: str) -> float:
return self.RET_TYPE(some_input)
class SomeChildClass(SomeClass):
"""This class's some_method will return int."""
RET_TYPE = int
if __name__ == "__main__":
ret: int = SomeChildClass().some_method("42"). #
ret2: float = SomeChildClass().some_method("42")
Моя IDE жалуется на несоответствие типов:
Это происходит потому, что моя IDE все еще использует подсказку типа из SomeClass.some_method
.
Исследования
Я думаю, что решение может заключаться в использовании дженериков, но я не уверен, что есть более простой способ.
Python: как переопределить тип намек на атрибут экземпляра в подклассе?
Предлагает использовать аннотации переменных экземпляра, но я не уверен, как это сделать для возвращаемого типа.
some_method
(тот, который определен наSomeClass
). ЭкземплярыSomeChildClass
будут разрешать имя метода в тот же объект функции, определенный вSomeClass
, на самом деле у них нет собственной отдельной реализации, которую вы могли бы аннотировать отдельно. Аннотации — это просто атрибут объекта функции, он не может иметь разные аннотации в зависимости от того, как он был разрешен с помощью MRO. - person wim   schedule 13.04.2020SomeChildClass
)? - person Intrastellar Explorer   schedule 13.04.2020RET_TYPE = float
, просто переопределить метод в дочернем классе? - person wim   schedule 13.04.2020