我看过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:多个基地有实例布局冲突”,我认为这是内置实现或类似内容之间的冲突(不完全确定我是否理解正确。)
我将如何从这里继续?我哪里做错了?提前谢谢!