有没有办法在python中执行包继承,也就是说包A有模块mod1,mod2和其他一些子包。现在包B应该继承A的所有模块和子包,以便它可以做到import B.mod1
。在python中的包继承
我已经通过在下面的链接http://peak.telecommunity.com/doc/src/peak/config/modules.html包裹继承部分,但无法import peak.api
。我也尝试导入子包的__init__
文件中的父包的所有模块,但它没有帮助。
有没有办法在python中执行包继承,也就是说包A有模块mod1,mod2和其他一些子包。现在包B应该继承A的所有模块和子包,以便它可以做到import B.mod1
。在python中的包继承
我已经通过在下面的链接http://peak.telecommunity.com/doc/src/peak/config/modules.html包裹继承部分,但无法import peak.api
。我也尝试导入子包的__init__
文件中的父包的所有模块,但它没有帮助。
这是可能的。你所要做的就是在__init__
中声明__all__
变量,它应该包含你想要公开的所有模块。有关更多信息,请参见Documentation。
# package B __init__.py
from A import mod1, mod2, modN
这就是你所需要的。
是的。例如见的源代码numpy
的__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'])
这有点乱,但会'的B进口*'工作?这会在'mod1'和'mod2'而不是'B.mod1'和'B.mod2'中添加'mod1','mod2'等等。 – bouteillebleu
明星导入只能用作python shell中的一个方便捷径。在模块中使用它们对于不可维护的代码来说是一个很好的入口。 –
@brunodesthuilliers在这种情况下,他们有时会被谨慎地使用,如果你只是想把别人的名字空间复制到你的名字空间中。 – katrielalex