使用“新”样式类(我在python 3.2中)是否可以将一个类拆分为多个文件?我有一个大类(从面向对象的设计角度来看,考虑耦合等等,它实际上应该是一个类,但是为了方便编辑类,最好分割几个文件。
如果您的问题确实只是在编辑器中使用大型类,那么我真正寻找的第一个解决方案是解决问题的更好方法。第二种解决方案是更好的编辑器,最好是带有代码折叠的编辑器。
也就是说,有几种方法可以将一个类分解为多个文件。Python使您可以通过将文件夹放入__init__.py其中来将其用作模块,然后将其从其他文件中导入。我们将在每个解决方案中使用此功能。首先创建一个名为的文件夹bigclass。
__init__.py
bigclass
.py
class Bigclass(object): from classdef1 import foo, bar, baz, quux from classdef2 import thing1, thing2 from classdef3 import magic, moremagic # unfortunately, "from classdefn import *" is an error or warning num = 42 # add more members here if you like
这样的好处是您最终得到了一个直接从派生的类,该类object在继承图中看起来不错。
object
您可以使用多重继承来组合类的各个部分。在您的各个模块中,您将为该类的Bigclass各个部分编写一个类定义。然后在您的__init__.py写道:
Bigclass
import classdef1, classdef2, classdef3
class Bigclass(classdef1.Bigclass, classdef2.Bigclass, classdef3.Bigclass): num = 42 # add more members if desired
如果多重继承成为问题,则 可以 使用单一继承:只需让每个类以链式方式从另一个继承即可。假设您没有在一个以上的类中定义任何内容,则顺序无关紧要。例如,classdef2.py将是:
classdef2.py
import classdef1
class Bigclass(classdef1.Bigclass): # more member defs here
classdef3会Bigclass从中导入classdef2并添加到其中,依此类推。您__init__.py只需导入最后一个:
classdef3
classdef2
from classdef42 import Bigclass
我通常更喜欢#1,因为它更明确地说明了您要从哪些文件中导入哪些成员,但是这些解决方案中的任何一种都可以为您服务。
要在任何这些情况下使用该类,您都可以使用文件夹名称作为模块名称将其导入:from bigclass import Bigclass
from bigclass import Bigclass