设想一个名为base
的模块中有一个名为Base
的类。
现在在另一个名为sub
的模块中,从Base
继承一个类Sub
:
import base
class Sub(base.Base):
pass
现在,如果我们添加第三个类,它继承自Sub
,并接受一个必须是Base
类型或其子类之一的参数:
import sub
class Deep(sub.Sub):
def __init__(self, parent):
if isinstance(parent, sub.base.Base):
pass
在继承树中越深入,Base
的路径将变成thedeepest.deeperanddeeper.reallydeep.deep.sub.base.Base
,这是没有人愿意看到的。你知道吗
我当然可以只做from base import *
和from sub import *
,然后只使用Base
,但是有没有一种方法可以导入,这样我就可以只使用类的原始模块的前缀?你知道吗
例如:
import deep
class ReallyDeep(deep.Deep):
def __init__(self, parent):
# I know my polymorphism, this is just an example.
if isinstance(parent, sub.Sub):
pass
elif isinstance(parent, base.Base):
pass
Python中的模块类似于单例,它们只被导入一次,所以
完全没有问题,事实上,这是最好的方法。你知道吗
delnan的意思是,在大多数情况下,深度嵌套的继承树是糟糕设计的标志。任何规则都有例外。但一般来说,避免深度嵌套的树会使代码更易于理解,更易于测试,因此更易于维护。你知道吗
相关问题 更多 >
编程相关推荐