这可能是一个非常基本的OOP问题:
我有2个不在同一层次结构中的类。但是这两个类的代码都有一些相同的方法。这些方法实现了类的“UI”。我打算将这些方法移到mixin中,让两个类继承mixin。
问题是:那些方法当前需要引用其类的属性(因为它们本质上是类的UI):例如:它们都引用self.MyVar()
,它在A类和B类中的定义不同
在这种情况下如何构建我的mixin?
答案 0 :(得分:1)
mixin可以调用self.MyVar()
即使没有实现它,也会使用继承对象的实现(第一个):
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
,这也会有用。
每次执行self.something()
时,Python都会按照“方法解析顺序”类定义的顺序查找something
:
print Inheritor.__mro__
(<class '__main__.Inheritor'>, <class '__main__.Mixin'>, <type 'object'>)