我想从pygame中扩展一些类,例如Surface
和Rect
。我可以使用继承,但这不会影响从pygame本身调用的调用,即返回Rect
和Surface
s的所有方法。
例如,语句screen = pygame.display.set_mode()
会返回pygame.Surface
,并允许我通过screen
在屏幕上绘制内容。如果我创建一个类MySurface(pygame.Surface)
并执行类似screen = MySurface()
的操作,我显然会获得新功能,但操作屏幕的能力会丢失。
是否有某种方法可以扩展此类的功能并将其应用于外部调用而无需修改任何外部文件?
答案 0 :(得分:0)
看起来pygame是一个C扩展模块,这意味着你扩展其类的能力将受到限制。通常,您只能扩展模块打算扩展的类。在pygame中,Sprite
和相关类被设计为扩展,但Surface
和Rect
类似乎不是。您仍然可以扩展这些类,但正如您所指出的那样,扩展在很大程度上仅对您自己的代码有用。
您可以尝试封装要扩展的类。像这样:
class MySurface(object):
def __init__(self, surface):
self._surface = surface
def blit(self, source, dest, area=None, special_flags = 0):
return self._surface.blit(source, dest, area, special_flags)
# code to forward all the other members
def myblit(self, source, dest):
# code that modifies source and dest
return self._surface.blit(source, dest)
mysurf = MySurface(pygame.display.set_mode())
您还应该考虑Sprite
类是否真的想要扩展。根据有关扩展或封装pygame.Surface
的其他问题,Sprite
类是他们真正想要的。