简而言之:是否有可能并且在良好实践中,可以从一个模块中访问和修改一个模块中的列表,或者最好重新构建它们以仅用于创建它们的列表?
我正在写一个游戏,当它超过1500行时,我认为现在是将它重组为模块以便于维护的时候了。 在原始程序中有几个列表,存储像瓷砖等游戏对象。 访问这些列表是为了迭代,也是从几个类中追加。
我想把所有需要从其他几个访问的列表/ dicts放入他们自己的存储模块,并将适当的容器导入到他们需要的模块中,但它看起来似乎不起作用。
这可以正确完成吗?
答案 0 :(得分:1)
有充分的理由让一个存储全局状态的对象可以从多个模块访问。您描述的场景听起来像是一个合适的用例。
在python中执行此操作以保持一些良好语义的正确方法是创建一个包含所有这些列表的Singleton类(如果列表代表彼此在概念上不同的信息,则使用单独的Singleton类)然后让其他模块修改这些Singleton对象(即,调用它们的方法)以将事物附加到列表中。单身人士只能创建一次。如果您尝试再次创建它们,则返回第一个对象,并且基本上不会创建新对象。因此,您可以让Singleton称为“GameState'”。
Python本身并不支持创建Singleton对象,但是有很多方法可以解决这个问题,查看how to create a singleton in python的堆栈溢出
答案 1 :(得分:1)
编写存储模块的方式似乎是正确的。但是在不知道细节的情况下,我只能提出一些好的做法,可能不适合你的情况。静态对象(如tile)应仅在一个位置加载/创建。对这些对象的访问应该在一个模块中实现的明确接口上进行。