了解Python中的语法

阿达什·钱德拉塞卡(Addarsh Chandrasekar)

我正在尝试在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的实例,因为实例声明不正确。那是什么呢?

马丁·彼得斯(Martijn Pieters)

这一切都是创建BoxesServer.channelClassclass属性。它只是对另一个类的引用。

为什么要这么做?好吧,它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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章