当重写方法定义相同但基类不同时如何收敛派生类

问题描述 投票:0回答:1

我有以下设计模式:

class Base:
  # definition omitted

class Derived(Base):
  # definition omitted
class Mock1(Base):
  def __init__(self, input, args):
    self._input = input
    super(Mock1, self).__init__(args)

  # my_func is defined in Base so we're overriding it
  def my_func(self, for_val):
    # defintion omitted

class Mock2(Derived):
  def __init__(self, input, args):
    self._input = input
    super(Mock2, self).__init__(args)

  # my_func is defined in Base (note it's not defined in Derived) so we're overriding it
  def my_func(self, for_val):
    # defintion omitted

我的俏皮话是

Mock1, Mock2
分别继承了
Base, Derived
,这似乎有重复的代码 b/c
my_func
在两个类中的定义方式相同,两个类之间的唯一区别是它继承的类。有没有更干净的方法来写这个?

我相信有一种方法可以动态更改要继承的类,但根据我的理解,它是不受欢迎的。

python design-patterns
1个回答
0
投票

你可以写一个mixin:

class Mixin:
  def my_func(self, for_val):
    # defintion omitted

并在需要时使用它:

class Mock2(Mixin, Derived):
    ...

更新:

抱歉,继承顺序错误:更改为:

Mixin, Derived

© www.soinside.com 2019 - 2024. All rights reserved.