当前位置:  开发笔记 > 编程语言 > 正文

Python mixins如何区分同样的方法?

如何解决《Pythonmixins如何区分同样的方法?》经验,为你挑选了1个好方法。

从这里开始,如果你定义一些这样的对象:

class Mixin1(object):
    def test(self):
        print "Mixin1"

class Mixin2(object):
    def test(self):
        print "Mixin2"

class BaseClass(object):
    pass

class MyClass(Mixin2, Mixin1, BaseClass):
    pass

你会得到:

>>> obj = MyClass()
>>> obj.test()
Mixin2

有办法调用方法吗?Mixin1 test()



1> chepner..:

明确地称它:

Mixin1.test(obj)

Python中的属性过程相对复杂.对于您给出的示例,这是查找以下值的过程obj.test:

    首先,看一下实例本身.在这种情况下,实例没有test属性.

    查看obj作为以下实例的类:MyClass.MyClass没有test属性.

    开始按方法解析顺序查看类MyClass.在这种情况下,MyClass.__mro__告诉你先看Mixin2,然后Mixin1,然后object.

    Mixin2有一个test属性,所以我们终于有一个匹配.

    Mixin2.test是一个带__get__方法的函数,因此调用它并使用返回值.

您可以放心地忽略此处的步骤5,并假设这Mixin2.test是一种方法.返回一个,你可以看到那些obj.test()电话Mixin2.test.

这可能有助于解释我在评论中提出问题的原因.您可以通过多种方式摆弄程序,以便obj.test()进行调用Mixin1.test().你可以修补对象,MyClass.__mro__你可以调整,你可以调整Mixin2.test实际做的事情,等等.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有