Skip to main content
 首页 » 编程设计

python 2.7 : How to extend a class from an imported base class

2025年05月04日18JeffreyZhao

python 的新手,如果这是 nub 的东西,我们深表歉意:

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

这是我的问题的一般形式:

运行时.py:

import baseclass 
import subclass 
 
#do stuff 

baseclass.py

class BaseClass(): 
    def __init__(self): 
        pass 
 
    def sharedMethod(self): 
        pass 
        # shared functionality 

子类.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 的类都需要导入它,不应该这样的情况下,执行此操作的适当方法是一遍又一遍地导入 baseclass。

我希望能够按照它们相互构建的顺序从单独的文件中导入类,我只是不知道该怎么做。有什么建议吗?


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

请您参考如下方法:

你说的很对。您必须在要使用它的任何文件中导入基类。如果您有许多使用它的文件,正确的方法确实是“一遍又一遍”地导入它。

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

此外,在许多文件中执行import baseclass 不会消耗任何资源。实际的 baseclass.py 文件只运行一次,相同的模块在以后的导入中重复使用,所以你不会因为多次导入它而在性能方面付出任何额外的代价。

import 是 Python 文件从其他 Python 模块访问内容的方式。如果不导入它们,您就无法在另一个文件中使用一个文件中的内容。

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