Python 构建混合子

Python 构建混合子,python,Python,这可能是一个非常基本的OOP问题: 我有两个不在同一层次结构中的类。但这两个类都有一些代码相同的方法。这些方法实现了它们类的“UI”。我计划将这些方法移动到mixin中,并让这两个类都继承该mixin 问题是:这些方法当前需要引用它们类的属性(因为它们本质上是类的UI):例如:它们都引用self.MyVar(),在类A和类B中定义不同 在这种情况下,如何构造mixin?mixin可以调用self.MyVar()即使没有实现它,也将使用继承对象的实现(首先): 顺便说一句,即使实现了Mixinge

这可能是一个非常基本的OOP问题:

我有两个不在同一层次结构中的类。但这两个类都有一些代码相同的方法。这些方法实现了它们类的“UI”。我计划将这些方法移动到mixin中,并让这两个类都继承该mixin

问题是:这些方法当前需要引用它们类的属性(因为它们本质上是类的UI):例如:它们都引用
self.MyVar()
,在类A和类B中定义不同


在这种情况下,如何构造mixin?

mixin可以调用
self.MyVar()
即使没有实现它,也将使用继承对象的实现(首先):

顺便说一句,即使实现了
Mixin
get\u message
,这也会起作用

每次执行
self.something()
,Python都会按照类的“方法解析顺序”定义的顺序查找
something

打印继承器。\u\mro__
(, )

Python有反射吗?你可以考虑你可能需要的任何成员。啊,这很有用。这是Python独有的,还是仅仅是一个通用的OOP概念?@user1008636确实取决于语言。比如说,在Go中,这是行不通的。Python有点不寻常,因为类可以调用自己继承层次结构中未定义的方法,但任何具有反射功能的语言都可以在一定程度上做到这一点(一些没有反射的语言可以简单地用适当的接口来模拟它)。
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"
print Inheritor.__mro__
(<class '__main__.Inheritor'>, <class '__main__.Mixin'>, <type 'object'>)