全球进口有继承权吗?

想象一下一个模块,其中调用base了一个类Base。现在在另一个名为的模块中,从sub继承一个类:SubBase


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


炎炎设计
浏览 120回答 1
1回答

波斯汪

Python中的模块就像单例,它们只被导入一次,所以import baseimport deepclass ReallyDeep(deep.Deep):    def __init__(self, parent):       if isinstance(parent, base.Base):           pass绝对没有问题,实际上,这是最好的方法。delnan的意思是,在大多数情况下,深度嵌套的继承树是不良设计的标志。与任何规则一样,也有例外。但是总的来说,避免深层嵌套的树将使您的代码更易于理解,更易于测试,因此更易于维护。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python