python - 如何在继承文件的装饰器函数中获取python文件名

标签 python python-3.x

我有一个主类和继承类。我在主类中有一个装饰器函数。 下面的代码位于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/

相关文章:

python - cx_Freeze 不包括库中的所有模块

python - 如何使用 GQL 删除记录?

python - 为什么返回此 lambda 表达式会导致字符串?

python - 基于另一个列值创建列,基于将值分配给输入列中的字符串值集

python - 使用python将字符附加到txt文件中的每一行

python - 在包的 __init__.py 中导入子模块时出现奇怪的命名空间污染

python - 使用 databricks 集群执行 azure 存储上存在的 python 代码

python-3.x - 如何让 Pycrypto 在 Docker 上正常工作?

python - 在 Python 3 中将二元函数映射到成对的列表上

python - 命名空间的概念,全局,局部相对于导入