使用“新”样式类(我使用的是 python 3.2)有没有办法将一个类拆分为多个文件?我有一个大类(从面向对象设计的角度来看,考虑到耦合等,它实际上应该是一个类,但是为了便于编辑类,最好将其拆分为几个文件。
如果您的问题确实只是在编辑器中处理一个大类,那么我实际上寻找的第一个解决方案是解决问题的更好方法。第二种解决方案是一个更好的编辑器,最好是具有代码折叠功能的编辑器。
也就是说,有几种方法可以将一个类分解为多个文件。 Python 允许您通过放置一个文件夹来将文件夹用作模块__init__.py
然后可以从其他文件导入内容。我们将在每个解决方案中使用此功能。创建一个文件夹,例如bigclass
first.
-
文件夹里放各种.py
最终将组成您的班级的文件。每个应该包含最终类的函数和变量定义,not类。在__init__.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
,这在您的继承图中看起来会很漂亮。
-
您可以使用多重继承来组合类的各个部分。在您的各个模块中,您将编写一个类定义Bigclass
与班级的部分内容。然后在你的__init__.py
write:
import classdef1, classdef2, classdef3
class Bigclass(classdef1.Bigclass, classdef2.Bigclass, classdef3.Bigclass):
num = 42 # add more members if desired
-
如果多重继承成为问题,您can使用单一继承:只需让每个类以链式方式从另一个类继承。假设您没有在多个类中定义任何内容,则顺序并不重要。例如,classdef2.py
会像:
import classdef1
class Bigclass(classdef1.Bigclass):
# more member defs here
classdef3
会进口Bigclass
from classdef2
并添加到其中,依此类推。你的__init__.py
只会导入最后一个:
from classdef42 import Bigclass
我通常更喜欢#1,因为它更明确地说明您要从哪些文件导入哪些成员,但这些解决方案中的任何一个都可以为您工作。
要在任何这些场景中使用该类,您只需导入它即可,使用文件夹名称作为模块名称:from bigclass import Bigclass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)