占位符类方法Python 3

2024-10-02 10:32:27 发布

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

我希望在它的类中被其他方法覆盖的方法。有没有办法(很好地)做到这一点?在

编辑:我对如何重写这些方法特别感兴趣。我试过def setup(self): ...game.setup = setup。这在某种程度上是可行的,但它不能与“self”参数一起正常工作,抛出 setup() missing 1 required positional argument: 'self'

编辑2:我意识到我应该子类Game并重写子类中的方法。我不知道为什么花了这么长时间。在

如果我的话是愚蠢和混乱的,下面是一些代码:

class Game(threading.Thread):
    def update(self):
        pygame.display.update()
        self.screen.fill(self.fillcolour)

    def setup(self):
        """Placeholder for setup"""
        pass

    def frame(self):
        """Placeholder for frame"""
        pass

    def handleInputs(self):
        """Placeholder for input handling"""

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def run(self):
        self.setup()

        while True:
            if self.FRAMERATE:
                self.clock.tick(self.FRAMERATE)

            self.frame()
            self.update()
            self.handleInputs()

Tags: 方法selfeventgame编辑fordefsetup
2条回答

我想你可以做些类似的事情:

class Whatever(object):
    def _placeholder(self,*args,**kwargs):
        """
        This function does nothing, but in a subclass, 
        it could be useful ...
        """
        return

    setup = _placeholder
    frame = _placeholder
    ...

这至少减少了锅炉板的代码。。。在

这称为Template Method Pattern,您的代码很好。在

但是,您可能希望为每个事件调用一个可重写的方法,而不是重写整个handleInputs(或者每次都必须重新实现循环)。在

class Game(threading.Thread):
    def update(self):
        pygame.display.update()
        self.screen.fill(self.fillcolour)

    def setup(self):
        """Placeholder for setup"""
        pass

    def frame(self):
        """Placeholder for frame"""
        pass

    def handleEvent(self, event):
        """Placeholder for input handling"""
        pass

    def handleInputs(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()
            self.handleEvent(event)

    def run(self):
        self.setup()

        while True:
            if self.FRAMERATE:
                self.clock.tick(self.FRAMERATE)

            self.frame()
            self.update()
            self.handleInputs()

相关问题 更多 >

    热门问题