在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模塊是否可以獲取文件的目錄? –