2

我在 python Twisted 库中使用 LineReceiver 类。我从 LineReceiver 源代码中看到,mdethods setLineMode 和 setRawMode 将类变量 line_mode 设置为 1 或 0。还有另一个名为 _buffer 的类变量,我假设它存储通过连接发送的数据。

但是为什么是 line_mode 和 _buffer 类变量呢?这是否意味着如果我的工厂创建多个 LineReceiver 实例(或从 LineReceiver 继承的协议),如果我设置 line_mode=1 那么所有 LineReceiver 协议实例都进入线路模式?这是否也意味着 LineReceiver 的所有实例都只有一个 _buffer?我不明白。有人可以解释一下吗?

4

1 回答 1

0

好的,我想通了。是的,LineReceiver 类确实有类变量 _buffer 和 line_mode。但是,它在 LineReceiver 方法中实际使用的是同名的实例变量。当python创建具有类变量的任何类的实例时,它也会创建同名的实例变量,并且这些实例变量具有创建实例时类变量所具有的任何值。

例如,实例可以检查 self.line_mode,它是实例变量 line_mode 的值。如果这是第一次访问实例变量,它应该与对应的类变量具有相同的值。但是如果你改变它,它会得到一个与类变量不同的新值。我想这只是 python 引擎盖下隐藏的一些东西。

您仍然可以通过访问 LineReceiver.line_mode 来获取类变量 line_mode 的值。

只是想我会写这个,以防其他任何人(比如我)是 python 新手并且被扭曲并感到困惑。

于 2013-07-18T21:14:52.723 回答