我希望有一个类,其中的方法可以在其他方法中调用,但我希望这些方法可重写并默认传递。有没有办法(很好地)做到这一点?
编辑:我特别感兴趣的是我将如何覆盖这些方法。我尝试过 def setup(self): ... 、game.setup = setup 。这有点工作,但它不能与“self”参数正常工作,抛出
setup() 缺少 1 个必需的位置参数:'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()
最佳答案
这称为 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()
关于python - 占位符类方法 Python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313665/