从Python中的多个不合作类继承方法

时间:2016-07-08 15:25:14

标签: python inheritance multiple-inheritance super

我看过Raymond Hettingers Pycon presentation并在Stackoverflow上阅读他的Python’s super() considered super!以及很多问题,但我遇到了遗传问题,我似乎无法找到答案对于。我将以我的问题为例,但我很想知道为什么它不起作用而不是如何解决它。

我有3个我想要继承的类,这样我可以使用他们的方法,但也可以在其他函数或方法中传递我自己的类的实例。

所有继承的类都没有在初始化程序中调用 super().__ init __(** kwargs),所以我尝试为每个类创建一个适配器类,并且 Root class 以捕获剩余的关键字参数:

class Root(object):
    def __init__(**kwargs):
        pass


class Rect(Root):
    def __init__(self, pos=(0, 0), size=(16, 16), **kwargs):
        self.rect = pygame.Rect(pos, size)
        super().__init__(**kwargs)


class Sprite(Root):
    def __init__(self, **kwargs):
        self.sprite = pygame.sprite.Sprite()
        super().__init__(**kwargs)


class Surface(Root):
    def __init__(self, size, **kwargs):
        self.image = pygame.Surface(size).convert()
        super().__init__(**kwargs)


class Gameobject(Rect, Sprite, Surface):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

这不起作用,因为每个类的方法都没有继承到GameObject类,而是只继承每个类的实例。

我的另一个尝试是从每个适配器类的pygame继承 Root 及其各自的类,例如:

class Rect(Root, pygame.Rect):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

这会导致错误:“ TypeError:多个基地有实例布局冲突”,我认为这是内置实现或类似内容之间的冲突(不完全确定我是否理解正确。)

我将如何从这里继续?我哪里做错了?提前谢谢!

0 个答案:

没有答案