我有以下设计模式:
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
在两个类中的定义方式相同,两个类之间的唯一区别是它继承的类。有没有更干净的方法来写这个?
我相信有一种方法可以动态更改要继承的类,但根据我的理解,它是不受欢迎的。
你可以写一个mixin:
class Mixin:
def my_func(self, for_val):
# defintion omitted
并在需要时使用它:
class Mock2(Mixin, Derived):
...
更新:
抱歉,继承顺序错误:更改为:
Mixin, Derived