我有大量的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()
答案 0 :(得分:1)
看看the inspect
module。它并不总是能正常工作(用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()