gpt4 book ai didi

python - 如何确定 pythondecorator 函数中的被调用者详细信息?

转载 作者:行者123 更新时间:2023-12-01 05:40:01 25 4
gpt4 key购买 nike

我的目标是在方法执行期间查找文件的名称。主要问题是我使用 python 装饰器来转换函数。该装饰器位于单独的文件中,并被导入到当前文件中。我用下面的一个小场景解释了这个问题:

代码场景

#Normal.py

import decorator

class A:
@entryExit
def move(self):
print "hello"

a=A()
a.move()

#decorator.py
import sys
import inspect
def entryExit(f):
def new_f(self,*args, **kwargs):
File_Name=inspect.getfile(inspect.currentframe()).split("\\")
print 'Entry',f.__name__,self.__class__.__name__,File_Name[-1]
f(self,*args)
print 'Exit',f.__name__,self.__class__.__name__,File_Name[-1]
return new_f

Actual Output:
Entry move A decorator.py
hello
Exit move A decorator.py

Needed Output:
Entry move A Normal.py
hello
Exit move A Normal.py

我可以从“实际输出”中了解到装饰器已导入,每次调用方法时,它都会转到“decorator.py”文件并执行,因此我们得到“实际输出”中显示的输出。

无论如何,我可以获得所需的输出,但同时仍导入 Decorator.py 文件吗?

最佳答案

将您的 File_Name 分配更改为:

File_Name = inspect.getfile(f)

做你想做的事。
inspect.getfile() 将一个对象作为参数,f 表示包装的函数。

来源:http://docs.python.org/2/library/inspect.html#inspect.getfile

关于python - 如何确定 pythondecorator 函数中的被调用者详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com