如何获取用python传递给我的装饰器的函数的文件名?

如何获取用python传递给我的装饰器的函数的文件名?,python,metaclass,python-datamodel,Python,Metaclass,Python Datamodel,我想获得被修饰函数的原始文件/脚本名等。我该怎么做 def decorate(fn): def wrapped(): return "scriptname: " + fn.scriptname? return wrapped 我试着使用fn.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu但这给了我更多需要的东西。我可以解析该字符串以获得函数名,但我想知道是否有

我想获得被修饰函数的原始文件/脚本名等。我该怎么做

   def decorate(fn):
        def wrapped():
            return "scriptname: " + fn.scriptname?  
        return wrapped
我试着使用
fn.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但这给了我更多需要的东西。我可以解析该字符串以获得函数名,但我想知道是否有更优雅的方法来实现它

return "filename: " + fn.func_code.co_filename

但是,这不适用于,您必须回到
inspect.getmodule

附带说明,在生产代码中依赖此类内容通常是一个糟糕的想法。需要注意的是,这依赖于实现细节,可能无法在CPython之外工作。使用
inspect
是实际的正确答案,但是当一行更容易时,为什么要选择正确答案呢|@Matthew Trevor是正确的,
inspect
更好,我不知道这一点,而是从gnibbler的回答中学到的。
import inspect
inspect.getfile(fn)