Как я могу захватить зависимости, используемые подмножеством кода в исходном файле Python? - PullRequest
1 голос
/ 09 февраля 2012

Скажите, у меня есть следующий код в code.py:

from foo import bar
from foo2 import bar2
from foo3 import wrapper

class A(bar):
    def m1(self,x):
        return wrapper(x)

Затем у меня есть ссылка на объект A в переменной "obj", и я получаю код для этого объекта следующим образом:

c = inspect.getsource(obj)

, который возвращает:

class A(bar):
    pass

Мне нужно иметь возможность проанализировать «inspect.getsource (obj)», чтобы узнать, что класс A зависит от «из панели импорта foo» и «от оболочки импорта foo3» в верхней части файла, возвращаемого «inspect». .getsourcefile (объект)».

Как мне этого добиться?

Единственный известный мне способ приблизиться - использовать modulefinder , но он работает на весь файл и даст мне все три импорта, а не только тот, который используется интересующим кодом.

~~~~~~~~~~~~~~~~~~~~~~~~~~ Изменить: обновленное определение ~~~~~~~~~~~~~~~~~~~~~~~~~~

1 Ответ

0 голосов
/ 09 февраля 2012

Если вы хотите проверить, наследуется ли объект или класс от класса в другом модуле, использование inspect, вероятно, является неправильным способом. Вместо этого вы можете использовать что-то подобное:

for base in A.__bases__:
  print "A depends on module %s" % base.__module__

Или для объекта:

for base in (obj.__class__,) + obj.__class__.__bases__:
  print "obj depends on module %s" % base.__module__
...