无法在所有基类上调用相同的方法

丹·塞默德

我想在我班上所有的混合罐上调用相同的方法。这是两个变体:

class MixinA(object):
    def get_id(self):
        return "A"


class MixinB(object):
    def get_id(self):
        return "B"


class Base(object):
    def get_id(self):
        for base_class in inspect.getmro(self.__class__):
            return ",".join(base_class.get_id())


class Instance(MixinA, MixinB, Base):
    pass


class MyTestCase(unittest.TestCase):
    def test_multiple_mixin_methods(self):
        """
        Sadly, we cannot call all mixin methods.
        :return:
        """

        ids = set(Instance().get_id())
        print(ids)
        assert ids == {"A", "B"}

可悲的是,这失败了。我只得到“ A”。我想要一个包含“ A”和“ B”的列表,顺序无所谓。

我在这里做错什么了吗?

非常感谢

伊丹·海姆·沙洛姆(Idan haim Shalom)

您需要调用超级。super调用MRO中的下一个方法,因此您将调用A =>B。您不需要Base类。

class MixinA(object):
    def get_id(self):
        return "A", super(MixinA, self).get_id()


class MixinB(object):
    def get_id(self):
        return "B"


class Instance(MixinA, MixinB):
    pass

首先,Instance().get_id()将will调用,A.get_id()然后对super的调用将调用MRO中的下一个方法B

更新

class MixinA(object):
    def get_id(self):
        return "A"


class MixinB(object):
    def get_id(self):
        return "B"


class Base(object):
    def get_id(self):
       return set([base_class.get_id(self) for base_class in inspect.getmro(self.__class__)[2:-1]])


class Instance(Base, MixinA, MixinB):
    pass

不像之前的mixins独立。在此示例中,您需要在MRO中首先使用基类

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

强制在所有基类中调用方法

来自分类Dev

在所有子类上调用相同的+ load实现

来自分类Dev

存根所有在类上调用的方法

来自分类Dev

有没有一种有效的方法可以在所有类型为T的对象上调用相同的方法?

来自分类Dev

有没有一种有效的方法可以在所有类型为T的对象上调用相同的方法?

来自分类Dev

使所有类方法调用相同的函数

来自分类Dev

使所有类方法调用相同的函数

来自分类Dev

在所有继承的类上隐式调用方法

来自分类Dev

代理类无法在子代上调用方法

来自分类Dev

C ++:在派生类成员上调用基类方法

来自分类Dev

即使我调用close(),也要记住在所有Realm实例上调用close()

来自分类Dev

是否可以在类中的所有泛型属性上调用方法?

来自分类Dev

如何在Python中的特定基类上调用方法?

来自分类Dev

在基类集合上调用派生方法

来自分类Dev

在基类集合上调用派生方法

来自分类Dev

如何强制RecyclerView.Adapter在所有元素上调用onBindViewHolder()

来自分类Dev

在所有数组成员上调用对象成员函数

来自分类Dev

强制在所有继承类中实现方法

来自分类Dev

在对象的所有实例上调用方法

来自分类Dev

如何在单个类悬停时在所有类中找到相同的名称?

来自分类Dev

如何在单个类悬停时在所有类中找到相同的名称?

来自分类Dev

订户类没有在事件上调用的公共方法

来自分类Dev

将相同的替代应用于基类中虚拟方法的所有实现

来自分类Dev

有没有一种方法可以防止在派生类的实例上调用基类方法?

来自分类Dev

初始化之前,C ++派生类在基类上调用方法

来自分类Dev

我是否必须在所有页面上调用phpini_set来设置会话到期时间?

来自分类Dev

如何从具有相同签名的 main 调用基类函数?

来自分类Dev

Symfony2-在所有控制器操作中调用相同的getRepository

来自分类Dev

为什么必须使用继承类的全名调用具有相同名称(不是签名)的基类上的方法?

Related 相关文章

  1. 1

    强制在所有基类中调用方法

  2. 2

    在所有子类上调用相同的+ load实现

  3. 3

    存根所有在类上调用的方法

  4. 4

    有没有一种有效的方法可以在所有类型为T的对象上调用相同的方法?

  5. 5

    有没有一种有效的方法可以在所有类型为T的对象上调用相同的方法?

  6. 6

    使所有类方法调用相同的函数

  7. 7

    使所有类方法调用相同的函数

  8. 8

    在所有继承的类上隐式调用方法

  9. 9

    代理类无法在子代上调用方法

  10. 10

    C ++:在派生类成员上调用基类方法

  11. 11

    即使我调用close(),也要记住在所有Realm实例上调用close()

  12. 12

    是否可以在类中的所有泛型属性上调用方法?

  13. 13

    如何在Python中的特定基类上调用方法?

  14. 14

    在基类集合上调用派生方法

  15. 15

    在基类集合上调用派生方法

  16. 16

    如何强制RecyclerView.Adapter在所有元素上调用onBindViewHolder()

  17. 17

    在所有数组成员上调用对象成员函数

  18. 18

    强制在所有继承类中实现方法

  19. 19

    在对象的所有实例上调用方法

  20. 20

    如何在单个类悬停时在所有类中找到相同的名称?

  21. 21

    如何在单个类悬停时在所有类中找到相同的名称?

  22. 22

    订户类没有在事件上调用的公共方法

  23. 23

    将相同的替代应用于基类中虚拟方法的所有实现

  24. 24

    有没有一种方法可以防止在派生类的实例上调用基类方法?

  25. 25

    初始化之前,C ++派生类在基类上调用方法

  26. 26

    我是否必须在所有页面上调用phpini_set来设置会话到期时间?

  27. 27

    如何从具有相同签名的 main 调用基类函数?

  28. 28

    Symfony2-在所有控制器操作中调用相同的getRepository

  29. 29

    为什么必须使用继承类的全名调用具有相同名称(不是签名)的基类上的方法?

热门标签

归档