我在python Twisted库中使用LineReceiver类。我从LineReceiver源代码中看到,mdethods setLineMode和setRawMode将类变量line_mode设置为1或0.还有另一个名为_buffer的类变量,我假设存储通过连接发送的数据。
但是为什么line_mode和_buffer类变量?这是不是意味着如果我的工厂创建LineReceiver的多个实例(或从LineReceiver继承的协议),如果我设置line_mode = 1,那么所有LineReceiver协议实例然后进入行模式?这是不是也意味着LineReceiver的所有实例只有一个_buffer?我不明白。有人可以解释一下吗?
答案 0 :(得分:0)
好的我明白了。是的,LineReceiver类确实有类变量_buffer和line_mode。但是,它在LineReceiver方法中实际使用的是具有相同名称的实例变量。当python创建任何具有类变量的类的实例时,它还会创建同名的实例变量,并且这些实例变量具有创建实例时类变量所具有的任何值。
因此,例如,实例可以检查self.line_mode,它是实例变量line_mode的值。如果这是第一次访问实例变量,它应该具有与相应类变量相同的值。但是如果你改变它,它会获得一个与类变量不同的新值。我想这只是python中引发的一些隐藏的东西。
通过访问LineReceiver.line_mode,您始终可以获得类变量line_mode的值。
我以为我会写这个以防万一其他人(比如我)对python不熟悉并扭曲并感到困惑。