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

Posted

技术标签:

【中文标题】如何在 python 中获取传递给我的装饰器的函数的文件名?【英文标题】:How can I get the file name of the function that is passed to my decorator in python? 【发布时间】:2012-08-22 14:04:14 【问题描述】:

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

   def decorate(fn):
        def wrapped():
            return "scriptname: " + fn.scriptname?  
        return wrapped

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

【问题讨论】:

在旁注中依赖生产代码中的这种东西通常是个坏主意 【参考方案1】:

试试这个:

return "filename: " + fn.func_code.co_filename

【讨论】:

请务必注意,这依赖于实现细节,并且可能无法在 CPython 之外运行。使用inspect 是实际正确的答案,但是当单行更容易时,为什么要正确,对吧? :| @Matthew Trevor 正确,inspect 更好,我不知道这一点,并从 gnibbler 的回答中了解到。【参考方案2】:
import inspect
inspect.getfile(fn)

这不适用于builtin functions,但您必须退回到inspect.getmodule

【讨论】:

以上是关于如何在 python 中获取传递给我的装饰器的函数的文件名?的主要内容,如果未能解决你的问题,请参考以下文章

Python装饰器

Python装饰器的实现原理

二十三Python 中 property() 函数及 @property 装饰器的使用

Python——装饰器

python笔记-4(装饰器生成器迭代器)

python装饰器