PyCharm: как вывести типы объектов, созданных во время выполнения - PullRequest
4 голосов
/ 24 февраля 2020

Я пытаюсь использовать библиотеку, которая создает объекты и добавляет их в глобальное пространство имен во время выполнения.

PyCharm не может найти ссылки на объекты, поскольку они изначально не находятся в пространстве имен.

Как мне сделать интроспекцию PyCharm, чтобы не жаловаться "Не могу найти ссылку ..."? Я не хочу использовать теги noinspection.


Пример кода

Чтобы прояснить вопрос, я составил пример кода использования объект, созданный во время выполнения в PyCharm.

main.py

from some_import import some_obj_1


if __name__ == "__main__":
    print(f"obj_1.some_attr = {some_obj_1.some_attr}")

some_import.py

class SomeClass:
    def __init__(self, attr_init: int = 0):
        self.some_attr = attr_init


globals()["some_obj_1"] = SomeClass(1)

Выход выполнения main.py:

obj_1.some_attr = 1

Что я вижу в PyCharm:

main.py view


Соответствующие статьи

Dynami c Вывод типа времени выполнения в PyCharm 2.7

В этой статье предлагается включить Collect run-time types information for code insight. Однако включение этих параметров и запуск отладчика не решили мою проблему.


Возможные решения

  • Создание файла-заглушки PyCharm
  • Подавление сообщения об ошибке с помощью тега PyCharm noinspection + подсказка типа
    • Это «руководство», и поэтому мне не очень нравится это решение
# noinspection PyUnresolvedReferences
from some_import import some_obj_1, SomeClass

some_obj_1: SomeClass


if __name__ == "__main__":
    print(f"obj_1.some_attr = {some_obj_1.some_attr}")

Это было сделано с использованием Python 3.7.6 и PyCharm 2019.2.5 CE.

1 Ответ

0 голосов
/ 05 марта 2020

Ссылка ниже заставляет меня думать, что это возможно, просто используя имя модуля.

Поведение глобальных переменных в «run with Python console»

Я написал этот код, но мне сложно тестировать, так как я использую Spyder, и это работает с вашей первоначальной попыткой

import some_import as si


if __name__ == "__main__":
    print(f"obj_1.some_attr = {si.some_obj_1.some_attr}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...