如何在A.py中扩展C.py使用的B.py中定义的类

时间:2014-07-22 00:18:10

标签: python pygame

我想从pygame中扩展一些类,例如SurfaceRect。我可以使用继承,但这不会影响从pygame本身调用的调用,即返回RectSurface s的所有方法。

例如,语句screen = pygame.display.set_mode()会返回pygame.Surface,并允许我通过screen在屏幕上绘制内容。如果我创建一个类MySurface(pygame.Surface)并执行类似screen = MySurface()的操作,我显然会获得新功能,但操作屏幕的能力会丢失。

是否有某种方法可以扩展此类的功能并将其应用于外部调用而无需修改任何外部文件?

1 个答案:

答案 0 :(得分:0)

看起来pygame是一个C扩展模块,这意味着你扩展其类的能力将受到限制。通常,您只能扩展模块打算扩展的类。在pygame中,Sprite和相关类被设计为扩展,但SurfaceRect类似乎不是。您仍然可以扩展这些类,但正如您所指出的那样,扩展在很大程度上仅对您自己的代码有用。

您可以尝试封装要扩展的类。像这样:

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类是他们真正想要的。