假設你有一個Python包僞裝類
./a
./a/__init__.py
./a/_b.py
以下佈局內__init__.py
的真實模塊,您有
from _b import *
和內部_b.py你有
class B(object): pass
如果您從交互式提示輸入
>>> import a
>>> a.B
<class 'a._b.B'>
>>>
我怎樣才能完全隱藏_b的存在?
我想解決的問題如下:我想要一個導入「隱藏」模塊和類的外觀包。從門面可用的類(在我的案例a
)保持穩定,並保證將來。然而,我希望自由地將課堂安置在「引擎蓋下」,因此隱藏了模塊。這很好,但是如果某些客戶端代碼使用外觀提供的對象,這個pickle數據將引用隱藏的模塊嵌套,而不是外觀嵌套。換句話說,如果我將B
類重新定位到模塊_c.py
中,客戶端代碼將無法取消激活,因爲醃漬類指的是已移動的a._b.B
。如果他們提到a.B
,我可以根據需要儘可能多地重新定位B類,而不會破壞醃製數據。
這可能是一個很好的解決方案,我也沒多想,但我會明確地設置模塊,每類。有沒有「更好」的把戲? (我的意思是,這已經足夠好了,但只是爲了好奇) – 2009-11-27 12:59:50
您可以在__init__中設置__module__屬性,也可以在 – miku 2009-11-27 13:05:36
中設置好PEP。我每次都有遺忘的可能(我主要是爲了兼容性而使用python 2.4) – 2009-11-27 13:06:24