Python 像包一样实现的模块
Python module implemented like a package
我有一个包含程序包的应用程序,因此:
* fruits/
| citrus/
| | __init__.py
| | oranges.py
| | mandarins.py
| | satsumas.py
| | ... etc
fruits/citrus/
下的 Python 文件包含 fruits.citrus.Citrus
.
的大约 300 个子类的定义
它们只是出于管理原因而存在于这样的单独文件中。没有人应该知道或关心 fruits.citrus.mandarins
等,除非他们正在研究 fruits.citrus
包。换句话说,我希望这个包假装它是一个模块。
我试过把它放在 __init__.py
:
from fruits.citrus.oranges import *
from fruits.citrus.mandarins import *
from fruits.citrus.satsumas import *
[...]
g = list(globals().items())
__all__ = list([
name for name, value in g
if value.__class__==type and
issubclass(value, Citrus)
])
这种作品,你可以看到fruits.citrus.Tangerine
。但是 pydoc 和 sphinx 仍然将 oranges
、mandarins
等列为包内容。而且Tangerine
都在fruits.citrus.Tangerine
和在fruits.citrus.mandarins.Tangerine
,所以事情比我开始的时候还要复杂。
必须有办法做到这一点,但我尝试的一切都是柠檬。帮助?
你能告诉我这是否有助于隐藏那些子模块吗:
from .mandarins import *
from .oranges import *
del globals()['mandarins']
del globals()['oranges']
原来没有什么好办法,不过也行
我试图使用 autodoc 程序来记录代码库,它一直列出所有这些 类 两次。最后的答案就是手写类!
我有一个包含程序包的应用程序,因此:
* fruits/
| citrus/
| | __init__.py
| | oranges.py
| | mandarins.py
| | satsumas.py
| | ... etc
fruits/citrus/
下的 Python 文件包含 fruits.citrus.Citrus
.
它们只是出于管理原因而存在于这样的单独文件中。没有人应该知道或关心 fruits.citrus.mandarins
等,除非他们正在研究 fruits.citrus
包。换句话说,我希望这个包假装它是一个模块。
我试过把它放在 __init__.py
:
from fruits.citrus.oranges import *
from fruits.citrus.mandarins import *
from fruits.citrus.satsumas import *
[...]
g = list(globals().items())
__all__ = list([
name for name, value in g
if value.__class__==type and
issubclass(value, Citrus)
])
这种作品,你可以看到fruits.citrus.Tangerine
。但是 pydoc 和 sphinx 仍然将 oranges
、mandarins
等列为包内容。而且Tangerine
都在fruits.citrus.Tangerine
和在fruits.citrus.mandarins.Tangerine
,所以事情比我开始的时候还要复杂。
必须有办法做到这一点,但我尝试的一切都是柠檬。帮助?
你能告诉我这是否有助于隐藏那些子模块吗:
from .mandarins import *
from .oranges import *
del globals()['mandarins']
del globals()['oranges']
原来没有什么好办法,不过也行
我试图使用 autodoc 程序来记录代码库,它一直列出所有这些 类 两次。最后的答案就是手写类!