Моя цель - найти имя файла во время выполнения метода. Основная проблема заключается в том, что я использую декоратор python для преобразования функции. Этот декоратор находится в отдельном файле и импортируется в текущий файл. Я объяснил проблему, используя небольшой сценарий ниже:Как определить детали вызываемого абонента в функции pythondecorator?
код сценария
#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
Я могу понять от «фактического выхода», что декоратор импортируется и каждый раз, когда метод вызывается он идет к «декоратор .py "и выполняется, и поэтому мы получаем результат, показанный в« Фактический вывод ».
Есть ли в любом случае, что я мог бы получить нужный вывод, но все же в то же время импортирую файл Decorator.py?