检测修饰函数的定义路径

时间:2014-09-03 16:02:18

标签: python python-2.7

有没有办法获取与传递给装饰器函数的函数对象相对应的文件路径?

最后我需要一个文件目录。

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

1 个答案:

答案 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'