有没有办法获取与传递给装饰器函数的函数对象相对应的文件路径?
最后我需要一个文件目录。
def mydec(arg):
def dec_inner(func):
def wrapper(*args, **kwargs):
# how to detect a path where func is defined?
return wrapper
return dec_inner
答案 0 :(得分:2)
您可以使用__module__
属性找到函数模块的名称:
>>> from random import choice
>>> choice.__module__
'random'
您可以通过sys.modules
dictionary:
>>> sys.modules['random']
<module 'random' from 'C:\Python27\lib\random.pyc'>
文件路径本身来自module
属性__file__
。把所有这些放在一起:
>>> sys.modules[choice.__module__].__file__
'C:\\Python27\\lib\\random.pyc'