有没有办法在 python 中进行包继承,即说包 A 有模块 mod1、mod2 和其他一些子包。现在包 B 应该从 A 继承所有模块和子包,这样应该可以做到import B.mod1
。
我已经通过以下链接 http://peak.telecommunity.com/doc/src/peak/config/modules.html中的包继承部分,但无法import peak.api
。我也试过在__init__
子包文件中导入父包的所有模块,但没有帮助。
有没有办法在 python 中进行包继承,即说包 A 有模块 mod1、mod2 和其他一些子包。现在包 B 应该从 A 继承所有模块和子包,这样应该可以做到import B.mod1
。
我已经通过以下链接 http://peak.telecommunity.com/doc/src/peak/config/modules.html中的包继承部分,但无法import peak.api
。我也试过在__init__
子包文件中导入父包的所有模块,但没有帮助。
# package B __init__.py
from A import mod1, mod2, modN
这就是你所需要的。
有可能的。您所要做的就是声明__all__
变量,__init__
其中应该包含您想要公开的所有模块。有关详细信息,请参阅文档。
是的。例如,参见numpy
's __init__.py
(Python 2.7) 的源代码:
import core
from core import *
import compat
import lib
from lib import *
import linalg
import fft
import polynomial
import random
import ctypeslib
import ma
import matrixlib as _mat
from matrixlib import *
# Make these accessible from numpy name-space
# but not imported in from numpy import *
from __builtin__ import bool, int, long, float, complex, \
object, unicode, str
from core import round, abs, max, min
__all__.extend(['__version__', 'pkgload', 'PackageLoader',
'show_config'])
__all__.extend(core.__all__)
__all__.extend(_mat.__all__)
__all__.extend(lib.__all__)
__all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])