编辑:我在寻求建议/正确的代码结构
当前的布局(可能是错误的)是:
-
Game
存储player
、screen
和units
。 -
Game
处理顶层逻辑,用户输入等 -
screen
和player
使用整个程序范围 -
units
列表被修改(添加+删除)在游戏
如果我想访问units
列表,或Game.spawn_foo()
或Game.width
,我应该如何重构我的代码?
- 使单元。py可以访问
Game()
实例?
game.py
class Game(object):
def __init__(self):
self.screen = # video
self.player = Player()
self.units = [Unit(), Unit()]
def loop(self):
while True:
self.screen.blit( self.player.sprite, self.player.location )
for u in self.units:
self.screen.blit( u.sprite, u.location )
def spawn_foo(self):
# tried to call from Unit() or Player()
self.units.append( ...rand Unit()... )
if __name__ == '__main__':
game = Game()
game.loop()
unit.py,使用函数或方法
class Unit(object):
def __init__(self, game):
self.sprite = # image
self.location = (0, 0)
def teleport(self):
# attempt to use game here
x = game.width / 2,
y = game.height / 2
self.location = (x, y)
标题>
是否有任何理由不在每个单元中保持对游戏的引用-例如在Unit.__init__(...)
中添加一行self.game = game
,然后在你的传送方法中使用它?
我能想到的唯一原因是您可能担心创建不会被垃圾收集的循环引用,在这种情况下,您可以查看weakref包,尽管在您的示例中可能不是太大的问题。