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

标签 python oop inheritance python-2.7

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" 业务放入您的模块中?

关于 python 2.7 : How to extend a class from an imported base class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863008/

相关文章:

python - 使用 Selenium 从表中抓取数据

python - 在我的类的实例上调用 iter() 不会创建其当前值的 'snapshot'?

python - 使用 pytest mocker 忽略assert_has_calls中的链式调用

python - 如何在 Python 中进行动态类生成? (或者一系列 if/else 会更好)

c# - 为什么我不能将此对象隐式转换为类引用

oop - 设计适当的类

通过可变模板继承 C++11 构造函数

python - 一次将集合中的多个唯一字符串项替换为多个其他字符串项

c++ - C++中父类对象调用子类方法

django - 覆盖 Django 中的内部模板 block