【问题标题】:Implement same methods in different classes在不同的类中实现相同的方法
【发布时间】:2015-07-04 12:36:28
【问题描述】:

这个问题我真的不知道怎么表达,所以我试着用一个例子来解释一下。

假设我有三个 GUI 类:

  1. 基面类
  2. 详细的表面类
  3. 精灵类

它们都是相互独立的,它们之间没有继承关系。 现在我有一个函数“drag()”,它使表面/精灵可拖动,我想将此函数实现为所有三个的方法。

由于所有实现的代码完全相同,我发现重写代码很烦人、麻烦且不好。 到目前为止,我唯一想到的就是为它创建一个单独的类并继承这个类。但这似乎也不是要走的路。

非常感谢您的建议。

编辑

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

  1. 底面
  2. 可拖动
  3. 可调整大小
  4. 事件处理程序

只有第一个是独立的,其他依赖于第一个(必须继承)。 最终用户应该能够毫不费力地在简单的 BaseSurface、实现可拖动的一种、一种具有可调整大小的、一种具有 eventHandler 的以及任何组合之间进行选择。 “不费吹灰之力”是指最终用户不必制作自定义类并继承所需的类并调用某些类共享的适当方法(init,更新,...)。

所以我能做的就是为每个可能的组合创建一个类,例如。 "BaseSurfaceDrag", "BaseSurfaceDragResize", ... 这很快就会变得一团糟。有什么不同的更好的方法?

【问题讨论】:

  • 创建一个父类并让三个类继承它正是要走的路。这是类的预期用途。

标签: python class methods pygame multiple-inheritance


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多