c3算法:用来判断多个类之间有继承关系时怎么辨别他们的执行顺序
例子:
1 class A(object): 2 pass 3 4 class B(A): 5 pass 6 7 class C(B): 8 pass 9 10 class D(object): 11 pass 12 13 class E(D,C): 14 pass 15 16 class F(object): 17 pass 18 19 class G(F): 20 pass 21 22 class H(C,G): 23 pass 24 25 class Foo(E,H): 26 pass 27 28 29 # print(E.__mro__) 30 # print(H.__mro__) 31 """ 32 L(Foo + L(E) + L(H) ) 33 34 35 36 L(E) = E,D,C,B,A,object 37 L(H) = H,C,B,A,G,F,object 38 39 Foo = (object) + (G,F,object) 40 Foo,E,D,H,C,B,A,G,F,object 41 """ 42 print(Foo.__mro__)#用来直接判断执行顺序.类名后面加__mro__方法
网络编程基础:
例子:
服务器基本格式:
1 import socket 2 3 # 创建服务端socket对象 4 server = socket.socket() 5 6 # 绑定IP和端口 7 server.bind(('192.168.13.155',8000)) 8 9 # 后边可以等5个人 10 server.listen(5) 11 12 print('服务端准备开始接收客户端的连接') 13 # 等待客户端来连接,如果没人来就傻傻的等待。 14 # conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。 15 # addr是客户端的地址信息。 16 # #### 阻塞,只有有客户端进行连接,则获取客户端连接然后开始进行通信。 17 conn,addr = server.accept() 18 19 print('已经有人连接上了,客户端信息:',conn,addr) 20 21 22 # 通过对象去获取(王晓东通过伞给我发送的消息) 23 # 1024表示:服务端通过(伞)获取数据时,一次性最多拿1024字节。 24 data = conn.recv(1024) 25 print('已经有人发来消息了',data) 26 27 28 # 服务端通过连接对象(伞)给客户端回复了一个消息。 29 conn.send(b'stop') 30 31 # 与客户端断开连接(放开那把伞) 32 conn.close() 33 34 # 关闭服务端的服务 35 server.close()
客户端基本格式:
import socket client = socket.socket() # 王晓东向服务端发起连接请求(递伞) # 阻塞,去连接,直到连接成功后才会继续向下走。 client.connect(('192.168.13.155',8000)) # # 链接上服务端后,向服务端发送消息 client.send(b'hello') # 王晓东等待服务端给他发送消息 data = client.recv(1024) print(data) # 关闭自己 client.close()