我正在使用Python编写游戏,其中所有IO活动都是由IO对象完成的(希望将该对象交换为另一个实现不同用户界面的对象)。游戏中几乎所有其他对象都需要在某个时刻访问IO系统(例如打印消息,更新播放器的位置,显示由游戏内动作引起的特殊效果),所以我的问题是:< / p>
对IO对象的引用是否有意义?
另一种方法是将对IO对象的引用传递给需要使用它的每个对象的__init__()
。我知道从测试的角度来看这是好的,但这是否值得产生“功能签名污染”?
感谢。
答案 0 :(得分:9)
是的,这是对全局变量的合法使用。如果你不愿意,如你所提到的那样,传递一个等同于这个全局的上下文对象是另一种选择。
由于我假设您正在使用多个文件(模块),为什么不这样做:
import io
io.print('hello, world')
io.clear()
这是一种常见的方式,具有比简单打印更复杂的I / O需求的程序,例如日志记录。
答案 1 :(得分:1)
是的,我想是的。
另一种可能性是创建一个具有loggerModule
和print()
等功能的模块write()
,但这只会稍微好一些。
答案 2 :(得分:0)
不。
变量太具体,无法在全局命名空间中传递。将它们隐藏在静态函数/类中,而不是在运行时向它们执行神奇的操作(或完全调用其他函数)。
考虑如果IO可以周期性地改变状态或者需要阻塞一段时间(如许多套接字那样)会发生什么。
考虑如果多次包含相同的代码块会发生什么。变量实例也会重复吗?
如果您想拥有相同变量的版本2,请考虑会发生什么。如果你想改变它的界面怎么办?您是否必须修改引用它的所有代码?
感染所有使用变量的代码是否真的有意义,知道它可能变坏的所有方法?