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/