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

2024-04-25 22:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,语句screen = pygame.display.set_mode()返回一个pygame.Surface,并允许我通过screen在屏幕上绘制东西。如果我创建一个类MySurface(pygame.Surface)并执行类似于screen = MySurface()的操作,我显然获得了新的功能,但是操作屏幕的能力就丧失了。你知道吗

有没有什么方法可以扩展此类类的功能并将其应用于外部调用,而不必修改任何外部文件?你知道吗


Tags: 方法rect功能屏幕modedisplay绘制语句
1条回答
网友
1楼 · 发布于 2024-04-25 22:28:04

看起来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类才是他们真正想要的。你知道吗

相关问题 更多 >