在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()
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它打印出来:
__main__
Run Code Online (Sandbox Code Playgroud)
如果我创建一个名为modtest2.py的第二个文件并运行它:
import modtest
if __name__ == "__main__":
modtest.ModTest().testmethod()
Run Code Online (Sandbox Code Playgroud)
打印出:
modtest
Run Code Online (Sandbox Code Playgroud)
如何将装饰器更改为始终打印出来modtest,即定义类的模块的名称?
Mat*_*son 15
当您直接执行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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23140 次 |
| 最近记录: |