想象一下一个模块,其中调用base了一个类Base。现在在另一个名为的模块中,从sub继承一个类:SubBaseimport baseclass Sub(base.Base): pass现在,如果我们添加第三个类,该类继承自Sub并采用必须Base是其子类型或其中一个子类型的参数,该怎么办:import subclass 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 deepclass 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
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
Python中的模块就像单例,它们只被导入一次,所以
import base
import deep
class ReallyDeep(deep.Deep):
def __init__(self, parent):
if isinstance(parent, base.Base):
pass
绝对没有问题,实际上,这是最好的方法。
delnan的意思是,在大多数情况下,深度嵌套的继承树是不良设计的标志。与任何规则一样,也有例外。但是总的来说,避免深层嵌套的树将使您的代码更易于理解,更易于测试,因此更易于维护。
添加回答
举报
0/150
提交
取消