Python 3 占位符类方法
我想创建一个类,这个类里面有一些方法,这些方法可以在其他方法中被调用。但我希望这些方法可以被重写,并且默认情况下可以不执行。有没有什么好的方法可以做到这一点呢?
补充说明:我特别想知道具体该怎么重写这些方法。我试过用 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()
2 个回答
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
...
这样可以减少一些重复的代码...
1
这被称为 模板方法模式,你的代码是没问题的。
不过,你可能想要为每个事件调用一个可以被重写的方法,而不是每次都重写整个 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()