Python游戏编程:我的IO对象是否是成为全局变量的合法候选者?

时间:2009-03-26 21:52:08

标签: python io global-variables

我正在使用Python编写游戏,其中所有IO活动都是由IO对象完成的(希望将该对象交换为另一个实现不同用户界面的对象)。游戏中几乎所有其他对象都需要在某个时刻访问IO系统(例如打印消息,更新播放器的位置,显示由游戏内动作引起的特殊效果),所以我的问题是:< / p>

对IO对象的引用是否有意义?

另一种方法是将对IO对象的引用传递给需要使用它的每个对象的__init__()。我知道从测试的角度来看这是好的,但这是否值得产生“功能签名污染”?

感谢。

3 个答案:

答案 0 :(得分:9)

是的,这是对全局变量的合法使用。如果你不愿意,如你所提到的那样,传递一个等同于这个全局的上下文对象是另一种选择。

由于我假设您正在使用多个文件(模块),为什么不这样做:

import io
io.print('hello, world')
io.clear()

这是一种常见的方式,具有比简单打印更复杂的I / O需求的程序,例如日志记录。

答案 1 :(得分:1)

是的,我想是的。

另一种可能性是创建一个具有loggerModuleprint()等功能的模块write(),但这只会稍微好一些。

答案 2 :(得分:0)

不。

变量太具体,无法在全局命名空间中传递。将它们隐藏在静态函数/类中,而不是在运行时向它们执行神奇的操作(或完全调用其他函数)。

考虑如果IO可以周期性地改变状态或者需要阻塞一段时间(如许多套接字那样)会发生什么。

考虑如果多次包含相同的代码块会发生什么。变量实例也会重复吗?

如果您想拥有相同变量的版本2,请考虑会发生什么。如果你想改变它的界面怎么办?您是否必须修改引用它的所有代码?

感染所有使用变量的代码是否真的有意义,知道它可能变坏的所有方法?