为了账号安全,请及时绑定邮箱和手机立即绑定

全球进口有继承权吗?

全球进口有继承权吗?

炎炎设计 2021-03-07 16:17:10
想象一下一个模块,其中调用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的意思是,在大多数情况下,深度嵌套的继承树是不良设计的标志。与任何规则一样,也有例外。但是总的来说,避免深层嵌套的树将使您的代码更易于理解,更易于测试,因此更易于维护。


查看完整回答
反对 回复 2021-03-26
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信