Python 2.7:如何从导入的基类扩展类

时间:2013-05-31 17:46:37

标签: python oop inheritance python-2.7

python的新手,如果这是nub东西,请道歉:

编写一个小模块(最终可能是一个软件包?)。它对于单个文件来说太大了,所以我将我的大型类移动到单个文件中。我的所有类都扩展了一个我用来保存一些基本功能的基类。

以下是我的问题的一般形式:

runtime.py:

import baseclass
import subclass

#do stuff

baseclass.py

class BaseClass():
    def __init__(self):
        pass

    def sharedMethod(self):
        pass
        # shared functionality

subclass.py

class SubClass(baseclass.BaseClass):
    def __init__(self):
        BaseClass.__init__(self)

追溯记录为:

Traceback (most recent call last):
  File "/path/to/runtime.py", line 2, in <module>
    import baseclass, subclass
  File "path/to/subclass.py", line 2, in <module>
    class Subclass(baseclass.BassClass):
  NameError: name 'baseclass' is not defined

如果我将baseclass导入subclass.py它可以正常工作,但这似乎意味着每个扩展baseclass的类都需要导入它,并且不能< / em>这样做的恰当方法是一遍又一遍地导入baseclass

我希望能够按照彼此构建的顺序从单独的文件中导入类,我只是不知道该怎么做。建议?


注意:所有答案都有帮助/正确。对于“正确的”,我只选择了最彻底/最有可能对每个人都有用的答案。干杯,谢谢。 :)

2 个答案:

答案 0 :(得分:7)

你说的是完全正确的。您必须在要使用它的任何文件中导入baseclass。如果您有许多使用它的文件,正确的方法是“反复”导入它。

但这并不意味着扩展基类的每个都需要导入它。它只是意味着使用基类的每个模块都需要导入它。在给定的文件中不需要只有一个类,并且没有特别的理由以这种方式做事。将import baseclass放在一个文件中然后在该文件中定义几个全部继承自baseclass的新类是完全没错的。这是一个很好的做事方式。不要将每个类拆分成自己的文件,除非每个类都足够大且足够复杂以保证这一点。

此外,在许多文件中执行import baseclass在资源方面不需要任何费用。实际的baseclass.py文件只运行一次,同一模块在以后的导入中重复使用,因此您不需要为导入多次性能而支付任何额外的压力。

import是Python文件从其他Python模块访问内容的方式。您无法在不导入文件的情况下使用其他文件中的文件。

顺便说一句,为什么要将__name__ = "SubClass"业务放入您的模块中?

答案 1 :(得分:0)

在Python中,模块的行为类似于单独的程序。因此,如果在runtime.py中导入baseclass,则不会将其导入subclass.py。 subclass.py必须导入baseclass本身。