1

python新手,如果这是小问题,我们深表歉意:

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

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

运行时.py:

import baseclass
import subclass

#do stuff

基类.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

如果我导入baseclasssubclass.py可以正常工作,但这似乎意味着扩展的每个类都baseclass需要导入它,而且执行此操作的适当方法不一定是一遍baseclass又一遍地导入。

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


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

4

2 回答 2

7

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

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

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

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

顺便说一句,你为什么要把这个__name__ = "SubClass"业务放到你的模块中?

于 2013-05-31T17:50:40.650 回答
0

在 Python 中,模块的行为类似于单独的程序。所以,如果你在 runtime.py 中导入 baseclass,它不会被导入到 subclass.py 中。subclass.py 必须自己导入基类。

于 2013-05-31T17:53:06.063 回答