2013-07-05 86 views
0

我懷疑這是導致「爲什麼你想這麼做?」的那些問題之一。但這裏有:Python中僞造模塊的類定義

我需要找到一種方法來僞造在__main__中定義的類的模塊;即:

比方說我們有a.py:

class A(object): 
    name = "a" 
    pass 

而且b.py:

import inspect 
import a 

class B(object): 
    __name__ = a.__name__ 
    name = "b" 
    pass 

print inspect.getmodule(B) 

調用b.py結果:

<module '__main__' from 'b.py'> 

那麼,如何我是否將A類模塊取爲b,而不將其移入b?

+0

<在此插入強制性問題> –

+0

至於爲什麼我要這麼做? – dilbert

+1

不,如「你喜歡紅葡萄酒還是白切達乾酪?」。 –

回答

0

您可以設置類的__module__屬性,但有警告:

class A(object): 
    __module__ = 'b' 

主要需要注意的是,這將導致如果模塊b沒有你打電話getmodule(A)時間進口getmodule返回無。我認爲如果您以某種非標準方式導入b,也可能會出現問題,例如通過隱式相對導入而非作爲程序包的一部分(如果它是程序包的一部分)導入它。

從概念上講,你所做的事有些可疑。將A的模塊設置爲某個其他模塊是有風險的,因爲該模塊在實際模塊時可能不知道(即導入),事實上可能「僞裝」模塊可能不存在。

+0

感謝您的回覆。我意識到這不是我的問題的根源。 – dilbert