在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
如何更改装饰器,始终打印出modtest
,该类定义的模块的名称?
这是一个很好的答案。是否有可能得到完整的模块路径,就像self.__ module__返回的那样,而不仅仅是模块文件名? –
我不确定您是否可以轻松地做到这一点。你可以通过在目录树上行走(从'__file__'开始)并寻找名为'__init __。py'的文件,当你没有找到文件时停下来,然后将路径段与点。我希望这在某些情况下会与真正的完整模块路径不同。 –
这种方法可以工作,但对于未知关系的两个python模块是否可以获取文件的目录? –