全球进口继承?

时间:2013-05-25 14:09:07

标签: python import module

想象一个名为base的模块,其中包含一个名为Base的类。 现在位于另一个名为sub的模块中,从Sub继承一个类Base

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

1 个答案:

答案 0 :(得分:1)

Python中的模块就像单例,它们只导入一次,所以

import base
import deep
class ReallyDeep(deep.Deep):
    def __init__(self, parent):
       if isinstance(parent, base.Base):
           pass

完全没有问题,事实上,这是最好的方法。

delnan的意思是,在大多数情况下,深层嵌套的继承树是糟糕设计的标志。与任何规则一样,也有例外。但一般来说,避免深度嵌套的树会使您的代码更容易理解,更容易测试,因此更容易维护。