我有一个主类和继承类。我在主类中有一个装饰器函数。 下面的代码位于base.py 中。
def functionErrorCase(functionParam):
def wrapper(self):
try:
functionParam(self)
except Exception as e:
self.InsertError(os.path.basename(__file__), functionParam.__name__)
return wrapper
在继承类的所有函数中使用 “__ file __”命令返回base.py文件名,但我想要使用的类的文件名
如何返回使用的类文件名?
最佳答案
全局变量 __file__
始终具有您读取它的模块的文件名。如果您的代码位于 base.py
中,则这就是它的文件名要去寻找。要从另一个模块读取文件,您需要从其全局变量中读取 __file__
。您可以方便地通过函数的 __globals__
属性访问函数的全局变量。所以你可以尝试functionParam.__globals__['__file__']
。
但是可能有一个更好的选择,根本不需要使用 __file__
。 Python 函数有一个 __module__
属性,用于命名定义它们的模块。如果您不需要文件名末尾的 .py
,则可能会这样比 __file__ 更有用。您还可以考虑使用函数的 __qualname__
而不是常规的 __name__
,因为前者将包含声明该函数的任何类的名称(例如 “Foo.bar”
表示 Foo
类的 bar
方法)。
关于python - 如何在继承文件的装饰器函数中获取python文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60366487/