Python найти файл, в котором объявлен псевдоним типа (например, Union, ...) - PullRequest
0 голосов
/ 09 июля 2020

Как мне найти файл, в котором была объявлена ​​/ создана аннотация псевдонима ввода?

Например:

# In a.py
Number = Union[int, float]

Мне нужна функция, которая извлекает, где файл в который изначально был создан псевдонимом ввода:

get_file(Number) == 'path/to/a.py'

Я не могу вызвать inspect.getfile(Number), поскольку Number является экземпляром _GenericAlias, а не новым классом.

Пример использования для создания документации HTML. Страница Number do c должна указывать на объявление исходного псевдонима файла.

Действительно упрощенный пример:

from my_types import Number

def f(x: Number):
  pass

In document.py

def document_fn(f):
  for name, annotation in f.__annotations__.items():
    print(f'Annotation declared in {get_file(annotation)}')

Текущие решения, которые я нашел, чтобы найти место создания объекта, потребуют вызова inspect.stack() в _GenericAlias конструкторе: Как узнать, где объект был создан в Python?

Думаю, я мог бы попытаться исправить typing._GenericAlias, чтобы ввести код отслеживания, но я бы очень предпочел избежать этого, поскольку он зависит от деталей реализации.

1 Ответ

0 голосов
/ 09 июля 2020

Нужная информация нигде не отслеживается. Лучшим вариантом, вероятно, будет статическая проверка исходного кода, без его импорта или фактического создания _GenericAlias. (Проверка Stati c является основным и наиболее поддерживаемым вариантом использования аннотаций типов.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...