有一个类跟踪它的实例是Pythonic吗?

Lig*_*eze 3 python pygame

请使用以下代码段

class Missile:
    instances = []

    def __init__(self):
        Missile.instances.append(self)
Run Code Online (Sandbox Code Playgroud)

现在拿代码:

class Hero():
    ...
    def fire(self):
        Missile()
Run Code Online (Sandbox Code Playgroud)

当英雄射击时,需要创建导弹并将其附加到主列表中.因此,当激活时,英雄对象需要引用该列表.以下是一些解决方案,但我确信还有其他解决方案:

  • 使列表成为全局列表,
  • 使用类变量(如上所述)或
  • 让hero对象持有对列表的引用.

我没有在gamedev上发布这个,因为我的问题实际上更为一般:以前的代码是否可以考虑?鉴于这种情况,是否有更多的Pythonic解决方案?

Eth*_*man 5

问题:

  • 一旦发射,英雄是否对导弹有进一步的控制?
    • 是 - >保留列表与英雄实例
    • 不 - >把它放在别的地方
  • 导弹级是否需要了解已制造的导弹以制造新型导弹或以其他方式处理导弹?
    • 是 - >保持列表与导弹类
    • 不 - >把它放在别的地方
  • 你对上述两个问题都回答了否?
    • 是 - >将列表作为游戏的一部分

如果您这样做的理由是有道理的,那么将该列表作为课程的一部分就没有什么不可思议的.

  • 这可能是将列表保留在类中的一个很好的理由; 或者,让你的游戏循环在一个列表中跟踪所有导弹,地雷,物品等,并确保所有这些东西都有自己的`update`,`destroy`等方法,所以游戏循环和只需添加`hero.update()`返回到该列表(以及任何`ally.update()`和`villain.update()`add),然后处理列表. (2认同)