在我自己創作的Python包目錄,我有一個__init__.py
文件,上面寫着:的Python:進口和更改規範名稱在當前模塊中
from _foo import *
在同一目錄中有一個_foomodule.so其由上面加載。共享庫在C++中實現(使用Boost Python)。這讓我說:
import foo
print foo.MyCppClass
這工作,但有一個怪癖:
foo._foo.MyCppClass
因此,儘管MyCppClass
存在如下:類是完整的包路徑,這使得它打印這個已知的Python foo
,foo.MyCppClass
中的別名不是其規範名稱。除了有點難看,這也使help()
有點跛腳:help(foo)
會說foo包含一個模塊_foo
,並且只有當你說help(foo._foo)
你是否獲得了MyCppClass
的文檔。
有沒有什麼我可以在__init__.py
或其他方式做不同的做法,否則,使Python看到foo.MyCppClass
作爲規範的名稱?
我正在使用Python 2.7;如果該解決方案也可以在2.6上運行,那將會很好。
如果'_foo'模塊是用Python編寫的,我只是告訴你改變你的類的__module__'屬性(你可以在定義每個類之後做這個,或者寫一個一次完成它的循環)但該屬性可能不能在你的C++類中寫入......也許有一些方法可以在Boost中更改該屬性? (從來沒有用過我自己。) – kindall 2012-02-24 18:58:40
我想我可以改變模塊名稱,但改變它是什麼?我不想從'foo._foo.MyCppClass'到'foo.bar.MyCppClass' - 我只想把'foo.MyCppClass'作爲Python中的規範名稱。 – 2012-02-25 16:51:58