一、python socket操作叙述
- sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略
- sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址
- sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)
- sk.connect(address):连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误
- sk.listen(backlog):开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。
二、__ new__和__init__、call
- __ new__是在实例创建之前被调用的,它的任务是创建实例然后返回该实例对象,是一个静态方法
- __ init__是当实例创建完成之后被调用的,负责对象的初始化,系统执行该方法前,对象已经存在了,然后设置对象属性的一些初始值,是一个实例方法
即,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
- __ init__ 方法为初始化方法,__new__方法才是真正的构造函数
- __new__方法创建实例对象供__init__方法、实例方法使用,__init__方法定制实例对象
- init 方法为初始化方法,为类的实例提供一些属性或者完成一些动作,初始化不返回任何东西
- __new__是一个静态方法,而__init__是一个实例方法
call : 对象可call,注意不是类,是对象。
关于 call 方法,不得不先提到一个概念,就是可调用对象(callable),我们平时自定义的函数、内置函数和类都属于可调用对象,但凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable。
如果在类中实现了 call 方法,那么实例对象也将成为一个可调用对象
a = A()
a() # __call__
a是实例对象,同时还是可调用对象,那么我就可以像函数一样调用它,在调用它的过程中,__call__将被执行。