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

the*_*rld 5 python metaclass python-datamodel

我想获取正在装饰的函数的原始文件/脚本名称等.我怎样才能做到这一点?

   def decorate(fn):
        def wrapped():
            return "scriptname: " + fn.scriptname?  
        return wrapped
Run Code Online (Sandbox Code Playgroud)

我尝试使用fn.__code__但是这给了我更多我需要的东西.我可以解析该字符串以获取函数名称,但是想知道是否有更优雅的方法来执行它

Joh*_*ooy 13

import inspect
inspect.getfile(fn)
Run Code Online (Sandbox Code Playgroud)

这对于内置函数不起作用,你必须回归到inspect.getmodule那些.


Mos*_*faR 1

尝试这个:

return "filename: " + fn.func_code.co_filename
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,这依赖于_实现细节_并且可能无法在 CPython 之外工作。使用“inspect”是真正的正确答案,但是当单行代码更容易时为什么要选择正确的答案,对吧?:| (2认同)