网络编程
多继承
查找顺序
经典类,从左到右依次往上查找,一条路走到黑,若左边类没有则去右边类及父类中查找(深度优先)
新式类:留个根,C3算法实现
ps:Python3中全是新式类
C3算法:先将自己取出来,再将左边和右边的父类全部取出,分左右两组,获取第一个表头和其他表位进行比较,不存在则拿走,如果存在,则维持原位不动,然后再获取第二个表的表头再次和其他表的表尾进行比较,最后全部取出和拿走的按先后取出顺序排列就是类的查找顺序
ps:mro就是遵循的C3算法顺序
class A(object):
pass
class B(object):
def f1(self):
print('B')
class C(A, B):
pass
print(C.mro())
"""输出结果:
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
"""
class A(object):
pass
class B(A):
pass
class C(B):
pass
class D(object):
pass
class E(D,C):
pass
class F(object):
pass
class G(F):
pass
class H(C,G):
pass
class Foo(E,H):
pass
"""
[E,D,object] + [C,B,A,object] ==> [E,D,C,B,A,object]
[H,C,B,A,object] + [G,F,object] ==> [H,C,B,A,G,F,object]
[Foo,E,D,C,B,A,object] + [H,C,B,A,G,F,object] ==> [Foo,E,D,H,C,B,A,G,F,object]
"""
print(Foo.mro())
#输出结果:
[<class '__main__.Foo'>, <class '__main__.E'>, <class '__main__.D'>, <class '__main__.H'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.G'>, <class '__main__.F'>, <class 'object'>]
网络编程
socket模块
注意:服务端与客户端不能直接发送列表,元组,字典。需要转化为二进制字节
服务端
socket.socket():创建服务端socket对象
bind:绑定IP地址和端口
listen:限制监听个数
accept:接受客户端连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据,address是连接客户端的地址。有阻塞的作用,只要客户端不连接就一直在那儿等待
recv(bufsize[,flag]):接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
conn.send(b'stop'):服务端通过连接对象(介质)给客户端回复消息。
import socket
server = socket.socket()
server.bind(('IP地址',端口))
server.listen(5)
while True:
conn,addr = server.accept()
# 字节类型
while True:
data = conn.recv(1024) # 阻塞
if data == b'exit':
break
response = data + b' I,love,you~'
conn.send(response)
conn.close()
客户端
- socket.socket:创建服务端socket对象
- client.connect(('服务端IP地址',端口):阻塞,去连接,直到连接成功后才会继续向下走。
- client.send(b'hello'):向服务端发送消息
- client.recv(1024):等待服务端的回复,也有阻塞作用
- client.close():关闭连接
import socket
sk = socket.socket()
sk.connect(('192.168.13.155',8001))
while True:
name = input("请输入姓名:")
sk.send(name.encode('utf-8')) # 字节
if name == 'exit':
break
response = sk.recv(1024) # 字节
print(response.decode('utf-8'))
sk.close()

浙公网安备 33010602011771号