gpt4 book ai didi

python - 如何获取对象类定义的模块名称而不是对象实例化的模块名称?

转载 作者:IT老高 更新时间:2023-10-28 21:13:43 25 4
gpt4 key购买 nike

在 python 2.5 中,我在一个名为 modtest.py 的模块中有以下代码:

def print_method_module(method):
def printer(self):
print self.__module__
return method(self)
return printer

class ModTest():

@print_method_module
def testmethod(self):
pass

if __name__ == "__main__":
ModTest().testmethod()

但是,当我运行它时,它会打印出来:

__main__

如果我创建第二个名为 modtest2.py 的文件并运行它:

import modtest

if __name__ == "__main__":
modtest.ModTest().testmethod()

打印出来:

modtest

如何更 retrofit 饰器以始终打印出 modtest,即定义类的模块的名称?

最佳答案

当你直接执行一个 python 源文件时,该文件的模块名称是 __main__,即使当你执行其他文件并导入它时它以另一个名称知道。

您可能希望像在 modtest2 中所做的那样,导入包含类定义的模块,而不是直接执行该文件。但是,出于诊断目的,您可以像这样获取主模块的文件名:

def print_method_module(method):
def printer(self):
name = self.__module__
if name == '__main__':
filename = sys.modules[self.__module__].__file__
name = os.path.splitext(os.path.basename(filename))[0]
print name
return method(self)
return printer

关于python - 如何获取对象类定义的模块名称而不是对象实例化的模块名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282369/

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