Нахождение имени файла и пути к файлу функции в Python - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть большое количество файлов python, где классы также наследуют и переопределяют методы. Я отслеживаю вызовы функций. Есть ли способ узнать подробности о функции (где она находится в каком файле) без фактического вызова функции (например, просто передавая объект и имя функции)?

Не забывать, что объекты являются динамическими. Так что просто перечисление всех имен функций проекта бесполезно.

Файл 1:

class ABC(DEF):
    def Start(self):
        pass

Файл 2:

class XYZ(DEF):
    def Start(self):
        pass

.

.

.

Файл n:

class PQR(AQZ):
    def Activity(self):
        obj = ABC()
        # How to know in which file, the function Start is defined
        obj.Start()

1 Ответ

0 голосов
/ 05 сентября 2018

Взгляните на модуль inspect . Это не всегда будет работать (встроенные в C встроенные программы не обязательно будут иметь номера строк или даже связанные файлы, поскольку некоторые модули, такие как sys, встроены в интерпретатор ядра, а не распространяются в виде отдельных файлов), но это самый близкий вам собираемся получить то, что вы ищете.

Обновление вашего примера для предоставления информации о происхождении вещей:

import inspect

class PQR(AQZ):
     def Activity(self):
        obj = ABC()
        # How to know in which file, the function Start is defined
        try:
            _, lineno = inspect.getsourcelines(obj.Start)
            srcfile = inspect.getsourcefile(obj.Start)
        except TypeError:
            print("{!r} is a built-in".format(obj.Start))
        else:
            print("{!r} comes from {!r}, line {}".format(obj.Start, srcfile, lineno))
        obj.Start()
...