我正在尝试在Python中使用PodSixNet库来实现多人游戏。我在网上看到了一些教程,服务器文件如下:
import PodSixNet.Channel
import PodSixNet.Server
from time import sleep
class ClientChannel(PodSixNet.Channel.Channel):
def Network(self, data):
print data
class BoxesServer(PodSixNet.Server.Server):
channelClass = ClientChannel
def __init__(self, *args, **kwargs):
PodSixNet.Server.Server.__init__(self, *args, **kwargs)
该行channelClass = ClientChannel
是什么意思?
channelClass
绝对不是ClientChannel
类的实例,因为实例声明不正确。那是什么呢?
这一切都是创建BoxesServer.channelClass
class属性。它只是对另一个类的引用。
为什么要这么做?好吧,它PodSixNet.Server.Server
是灵活的,它不会对将用于创建新连接通道的类进行硬编码。相反,它将查找该self.channelClass
属性,并使用该属性来创建新的通道实例。参见Server.handle_accept()
方法源:
self.channels.append(self.channelClass(conn, addr, self, self._map))
self.channelClass()
然后,调用将创建分配给该属性的任何类的实例。这使您在定义新的子类时可以轻松地换出通道类。
请注意,PodSixNet.Server.Server()
在创建实例时,该类还可以将channel类作为参数。然后,它将覆盖您设置的class属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句