Обратите внимание, что mypy позволяет использовать общие типы self определенными небезопасными способами для поддержки распространенных идиом. Например, использование универсального типа self в типе аргумента допускается, даже если это небезопасно.
Затем упоминается пример использования универсального типа self в аргумент:
Код: Выделить всё
from typing import TypeVar
T = TypeVar("T")
class Base:
def compare(self: T, other: T) -> bool:
return False
class Sub(Base):
def __init__(self, x: int) -> None:
self.x = x
# This is unsafe (see below) but allowed because it's
# a common pattern and rarely causes issues in practice.
def compare(self, other: Sub) -> bool:
return self.x > other.x
b: Base = Sub(42)
b.compare(Base()) # Runtime error here: 'Base' object has no attribute 'x'
Так какой смысл в документе?PS: Смысл «небезопасного» в документе заключается в том, что он хорошо проверяет тип, но создает исключение во время выполнения. Но я не могу понять, почему это связано с аннотацией другого: T в Base.compare. Я думаю, это связано с неточным типом b, который разработчик должен был привести к Sub.
Другими словами: что мне делать, если у меня есть метод, который принимает то же самое тип объекта такой же, как и другие его аргументы?
Подробнее здесь: https://stackoverflow.com/questions/778 ... n-argument