好的,我有2个非常大的类> 1k行,我现在分成多个.然后,他们使用多重继承重新组合.现在我想知道,如果有更干净/更好的pythonic方式这样做.完全将它们分解出去会导致无数的self.otherself.do_something调用,我认为这不应该是它应该完成的方式.
为了使事情清楚,这是它目前的样子:
from gui_events import GUIEvents # event handlers
from gui_helpers import GUIHelpers # helper methods that don't directly modify the GUI
# GUI.py
class GUI(gtk.Window, GUIEvents, GUIHelpers):
# general stuff here stuff here
Run Code Online (Sandbox Code Playgroud)
造成这种情况的一个问题是Pylint抱怨给我数万亿的"init not called"/"undefined attribute"/"在定义之前访问的属性"警告.
编辑:
你可能想看看代码,让自己想象一下整个事情究竟是什么.
http://github.com/BonsaiDen/Atarashii/tree/next/atarashii/usr/share/pyshared/atarashii/
请注意,我正在尝试将这个东西尽可能保持干燥,我正在使用pylint来检测代码重复,它唯一抱怨的是导入.
如果你想使用多重继承将所有东西组合成一个大类(这可能是有意义的),那么你可以重构每个父类,以便每个方法和属性都是私有的(以' __' 开头)或者该类唯一的2-3个字符前缀.例如,您的GUIEvents类中的所有方法和属性ge_都GUIHelpers可以从一开始就可以开始gh_.通过这样做,您将获得使用单独的子类实例(self.ge.doSomething()vs self.ge_doSomething())的一些清晰度,并且您将避免冲突的成员名称,这是将这些大型类合并为一个时的主要风险.
首先找到模拟应用程序需要使用的真实世界概念的类.那些是课程的天然候选人.
尽量避免多重继承 ; 它很少有用,总是有点令人困惑.相反,请使用功能组合("HAS-A"关系)为由其他对象组成的对象提供丰富的属性.
记得让每个方法做一个小的,具体的事情 ; 这必然需要分解将太多东西分成小块的方法.
重构你发现很多这样的方法的情况是重复彼此的功能; 这是另一种查找应该属于不同类的自然功能集合的方法.