Как правильно аннотировать типы внедренной зависимости в Python?Python

Программы на Python
Anonymous
Как правильно аннотировать типы внедренной зависимости в Python?

Сообщение Anonymous »

Может ли кто-нибудь подсказать мне, как лучше всего аннотировать тип внедрённой зависимости в Python, чтобы член правильно идентифицировался с помощью подсказок типа в IDE?
Возьмите следующий пример:

Код: Выделить всё

class Type: pass

class Type1(Type):
def __init__(self, value):
self.some_member = value

class Type2(Type):
def __init__(self, value):
self.other_member = value

class Base:
def __init__(self, injected: Type):
self.injected = injected

class Derived1(Base):
def __init__(self, injected: Type1):
super().__init__(injected)

class Derived2(Base):
def __init__(self, injected: Type2):
super().__init__(injected)

Мне бы хотелось, чтобы IDE (VS Code/PyCharm и т. д.) могла обеспечивать поддержку подсказок типов при доступе к членам внедренной зависимости:

Код: Выделить всё

instance1 = Derived1(Type1(5))
instance1.injected.some_member = 2  # IDE knows nothing about `some_member`

Документация предполагает, что лучший способ решить эту проблему — использовать TypeVar

Код: Выделить всё

MyType = TypeVar('MyType', bound=Type)

class Base:
def __init__(self, injected: MyType):
self._injected = injected
К сожалению, это не помогает. Будем признательны за любые предложения.
Обратите внимание, что сам линтер полностью доволен использованием, поэтому это больше похоже на возможное ограничение самоанализа подсказок типов в IDE.< /эм>

Подробнее здесь: https://stackoverflow.com/questions/717 ... -in-python

Вернуться в «Python»