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