网络编程

多继承

查找顺序

经典类,从左到右依次往上查找,一条路走到黑,若左边类没有则去右边类及父类中查找(深度优先)

新式类:留个根,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()

  

  

posted @ 2018-09-03 16:48  张大仙er  阅读(226)  评论(0)    收藏  举报