2015-04-26 57 views
2

我真的不知道怎么说这个问题,所以我会试着用一个例子来解释它。在不同的类中实现相同的方法

比方说,我有三个GUI类:

  1. 基面类
  2. 详细的表面类
  3. Sprite类

他们都是相互独立的,中间没有继承他们。 现在我有一个函数“drag()”,它可以让surface/sprite变成可拖拽的,我想把这个函数作为它们三个的方法来实现。

因为它是所有实现完全相同的代码,所以我觉得它很烦人,笨重和糟糕的做法来重写代码。 我到目前为止唯一想到的就是为它制作一个安全类,并继承这个类。但是,这似乎也不是要走的路。

我会非常感谢一些建议。

EDIT

具有稍微不同的设置另一个例子 - 我有以下类:

  1. BaseSurface
  2. Dragable
  3. 可调整
  4. 事件处理器

只有第一个是独立的,其他的依赖于第一个(必须被继承)。 最终用户应该毫不费力地选择一个简单的BaseSurface,一个用于实现可拖动,一个用可调整大小,一个用eventHandler以及任意组合。通过“毫不费力”,我的意思是最终用户不必制作自定义类并继承所需的类,并调用某些类共享的适当方法(init,update,...)。

所以我可以做的是为每个可能的组合做一个类,例如。 “BaseSurfaceDrag”,“BaseSurfaceDragResize”,... 这将很快得到混乱。什么是另一种更好的方法呢?

+2

做一个父类,并有三个类继承它正是要走的路。这是类的预期用途。 – TigerhawkT3

回答

1

这正是你应该使用父类的情况。在这两种情况下,它看起来像你的父类(逻辑)应该是这样的:

class Drawable(object): 
    def drag(self, *args, **kwargs): 
     """Drag and drop behavior""" 
     # Your code goes here 

然后其他每个班从

class BaseSurface(Drawable): 
    # stuff 

class DetailedSurface(Drawable): 
    # stuff 

class Sprite(Drawable): 
    # stuff 

继承了你所拥有的是接口的第二种情况,所以你可以逻辑地做这样的事情:

class DragInterface(object): 
    """Implements a `drag` method""" 
    def drag(self): 
     """Drag and drop behavior""" 
     # Your code goes here 

class ResizeInterface(object): 
    """Implements a `resize` method""" 
    def resize(self): 
     """Drag and drop resize""" 
     # Code 

class EventHandlerInterface(object): 
    """Handles events""" 
    def handle(self, evt): 
     # Code 

class MyNewSurface(BaseSurface, DragInterface, ResizeInterface): 
    """Draggable, resizeable surface""" 
    # Implement here 
相关问题