Я определяю атрибут типа MyAbstractClass (абстрактный класс), который принимает значение конкретного подкласса MyConcreteClass. Когда я нажимаю «Перейти к определению» в VSCode при poke в self.item.poke(), я перехожу к MyAbstractClass.poke(), что и ожидалось.
Однако во время выполнения в режиме отладки, когдаContainer.item привязан к экземпляру MyConcreteClass, IDE могла бы работать лучше и перевести меня в MyConcreteClass.poke( ). Есть ли простые способы сделать это?
Все, что мне нужно, — это больше удобства при редактировании и отладке моего кода.
Один из вариантов — заменить item: MyAbstractClass с item: Union[MyAbstractClass, MyConcreteClass, MyConcreteClass2, ...], и в этом случае команда «Перейти к определению» создаст всплывающее окно со всеми перечисленными методами, что позволит мне прыгать через них. Однако необходимость вручную перечислять все возможные подклассы нарушает модульность, а также мне приходится самому проверять конкретный тип объекта. Существует ли решение, которое автоматизирует это и использует преимущества инфраструктуры динамического разрешения Python?
Другой вариант — удалить все подсказки типов. Затем «Перейти к определению» в режиме отладки переходит непосредственно к конкретной реализации метода. Это происходит за счет того, что он вообще не работает, если только не запущен отладчик и не привязан контейнер.item.
Ни один из вариантов не является оптимальным. Я хочу получить лучшее в обеих ситуациях: перейти к абстрактному методу при редактировании в автономном режиме и перейти к конкретному методу при отладке.
from abc import ABC, abstractmethod
class MyAbstractClass(ABC):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def poke(self):
pass
class MyConcreteClass(MyAbstractClass):
def __init__(self):
pass
def poke(self):
print("Poked!")
class MyContainerClass():
item : MyAbstractClass
def __init__(self, item: MyAbstractClass):
self.item = item
def poke_item(self):
self.item.poke()
item = MyConcreteClass()
container = MyContainerClass(item=item)
container.poke_item()
Подробнее здесь: https://stackoverflow.com/questions/787 ... ance-durin
Может ли «Перейти к определению» перейти к конкретному классу в VSCode/Python (Pylance) во время отладки? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как «Перейти к определению» и «Перейти к ссылкам» работают в vscode для Python?
Anonymous » » в форуме Python - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-