4
我正在用C編寫一個python模塊,並尋找一種在模塊內部編寫模塊的方法。python c api創建一個python模塊
PyMODINIT_FUNC
initA(void)
{
PyObject* pMod, pSubMod;
pMod = Py_InitModule3("A", A_Methods, A_Doc);
pSubMod = PyModule_New("B");
PyModule_AddStringConstant(pSubMod, "__doc__", B_Doc);
PyModule_AddIntConstant(pSubMod, "SOMETHING", 10);
PyModule_AddObject(pMod, "B", pSubMod);
... and so on ...
編譯後,我試圖通過各種導入方法
>>> import A
>>> print A.B.SOMETHING
10
>>> from A import B
>>> print B.SOMETHING
10
>>> from A.B import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named B
首先兩個聲音合理,做工精細訪問模塊及其常量。但是,最後一個不起作用。我期待我應該有一個相當於__init__.py
腳本的代碼。但是,我不想編寫一個單獨的.py文件;而是我想直接在C init函數中擁有這樣的代碼。
作爲參考,我附上__dict__
和__all__
這兩個模塊。
>>> A.__dict__
{'B': <module 'B' (built-in)>, '__package__': None, '__file__': 'A.so'}
>>> A.B.__dict__
{'SOMETHING': 10, '__package__': None, '__name__': 'B', '__doc__': 'B_Doc'}
>>> A.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__all__'
>>> A.B.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__all__'
感謝,