这可能是一个非常基本的 OOP 问题:
我有 2 个不在同一层次结构中的类。但是这两个类都有一些在其代码中相同的方法。这些方法实现了它们类的“UI”。我打算将这些方法移动到一个 mixin 中,并让两个类都继承该 mixin。
问题是:这些方法当前需要引用其类的属性(因为它们本质上是类的 UI):例如:它们都引用self.MyVar()
,在 A 类和 B 类中定义不同。
在这种情况下,我该如何构建我的 mixin?
这可能是一个非常基本的 OOP 问题:
我有 2 个不在同一层次结构中的类。但是这两个类都有一些在其代码中相同的方法。这些方法实现了它们类的“UI”。我打算将这些方法移动到一个 mixin 中,并让两个类都继承该 mixin。
问题是:这些方法当前需要引用其类的属性(因为它们本质上是类的 UI):例如:它们都引用self.MyVar()
,在 A 类和 B 类中定义不同。
在这种情况下,我该如何构建我的 mixin?
self.MyVar()
即使没有实现mixin 也可以调用,将使用继承对象的实现(首先):
class Mixin(object):
def talk(self):
print self.get_message()
class Inheritor(Mixin):
def get_message(self):
return "I'm inheriting"
i = Inheritor()
i.talk()
# prints "I'm inheriting"
顺便说一句,即使Mixin
实施get_message
了,这也会起作用。
每次你这样做时,Python 都会按照类的“方法解析顺序”定义的顺序进行self.something()
查找:something
print Inheritor.__mro__
(<class '__main__.Inheritor'>, <class '__main__.Mixin'>, <type 'object'>)