Jon*_*ine 1 python oop inheritance python-2.7
python新手,如果这是nub东西,请道歉:
写一个小模块(可能是一个包,最终?).它对于单个文件来说太大了,所以我将我的大型类移动到单个文件中.我的所有类都扩展了一个我用来保存一些基本功能的基类.
这是我的问题的一般形式:
runtime.py:
import baseclass
import subclass
#do stuff
Run Code Online (Sandbox Code Playgroud)
baseclass.py
class BaseClass():
def __init__(self):
pass
def sharedMethod(self):
pass
# shared functionality
Run Code Online (Sandbox Code Playgroud)
subclass.py
class SubClass(baseclass.BaseClass):
def __init__(self):
BaseClass.__init__(self)
Run Code Online (Sandbox Code Playgroud)
追溯记录如下:
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
Run Code Online (Sandbox Code Playgroud)
如果我导入baseclass到subclass.py它工作正常,但是这似乎意味着,每一个延伸类baseclass需要导入它,它musn't是适当的方式做,这是进口的情况下,baseclass一遍又一遍.
我希望能够按照它们相互构建的顺序从单独的文件中导入类,我只是不知道该怎么做.建议吗?
注意:所有答案都有帮助/正确.对于"正确的",我只选择了最彻底/最有可能对每个人都有用的答案.干杯,谢谢.:)
你说的是完全正确的.您必须在要使用它的任何文件中导入baseclass.如果您有许多使用它的文件,正确的方法是"反复"导入它.
但是,这并不意味着每一个类扩展基类,需要将其导入.它只是意味着使用基类的每个模块都需要导入它.在给定的文件中不需要只有一个类,并且没有特别的理由以这种方式做事.这是完全正常的有import baseclass在一个文件中,然后,在该文件中,定义所有从基类继承了几个新类.这是一个很好的做事方式.不要将每个类拆分成自己的文件,除非每个类都足够大且足够复杂以保证这一点.
此外,import baseclass在许多文件中进行操作不会花费任何资源.实际baseclass.py文件只运行一次,同一模块在以后的导入中重复使用,因此在导入多次的性能方面不需要支付任何额外的压力.
import是Python文件从其他Python模块访问东西的方式.您无法在不导入文件的情况下使用另一个文件中的文件.
顺便说一下,为什么要将这项__name__ = "SubClass"业务纳入您的模块?