day27
面向对象多继承
b. 经典类和新式类
py2:
经典类
新式类,如果自己或自己的前辈只要有人继承object,那么此类就是新式类。
py3:不管怎么写都是新式类
新式类
经典类和新式类的查找成员的顺序不一样。
经典类,一条道走到黑(深度优先)。
新式类,C3算法实现(python )。(广度优先)
Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W)
Foo, I,B,
获取第一个表头 和 其他表位进行比较
不存在则拿走。
如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
简单:
经典类,一条道走到黑(深度优先)。
新式类,留个根(保留最后一个)。(科学C3算法);
注意事项:
super是遵循__mro__执行顺序。 C3算法
class F():
pass
print(F,__mro__) 可以查看继承顺序-
网络编程
a. 软件
客户端:CS架构, client -> server
浏览器:BS架构, browser -> server
b. 如何实现相互通信。
需求一:编写两个软件,软件之间相互通信。
需求二:两个人直接连接 (网线)
需求三:教室相互通信(交换机)
使用IP地址:ipconfig/ifconfig
s1:192.168.13.155
s2:192.168.13.25
三亚女朋友:192.168.13.43 租公网IP
需求四:和三亚的女友通信(交换机+n*路由器)
总结:
1. 相互通信本质发送 0101010101
2. 交换机作用
3. 通过ipconfig查看自己的内网IP
4. 公网IP,掏钱。
import socket
client = socket.socket()
# 向服务端发起连接请求(递伞)
# 阻塞,去连接,直到连接成功后才会继续向下走。
client.connect(('192.168.13.155',8000))
# # 链接上服务端后,向服务端发送消息
client.send(b'hello')
# 等待服务端给他发送消息
data = client.recv(1024)
print(data)
# 关闭自己
client.close()
import socket
# 创建服务端socket对象
server = socket.socket()
# 绑定IP和端口
server.bind(('192.168.13.155',8000))
# 后边可以等5个人
server.listen(5)
print('服务端准备开始接收客户端的连接')
# 等待客户端来连接,如果没人来就傻傻的等待。
# conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。
# addr是客户端的地址信息。
# #### 阻塞,只有有客户端进行连接,则获取客户端连接然后开始进行通信。
conn,addr = server.accept()
print('已经有人连接上了,客户端信息:',conn,addr)
# 通过对象去获取(王晓东通过伞给我发送的消息)
# 1024表示:服务端通过(伞)获取数据时,一次性最多拿1024字节。
data = conn.recv(1024)
print('已经有人发来消息了',data)
# 服务端通过连接对象(伞)给客户端回复了一个消息。
conn.send(b'stop')
# 与客户端断开连接(放开那把伞)
conn.close()
# 关闭服务端的服务
server.close()
作业:
1. 用户登录作业:
1. 服务端
- 等待客户端来发送数据:用户名、密码
- 本地文件中查看用户名密码是否合法。
- 合法:登录成功
- 否则:用户名或密码错误
2. 客户端
- 用户输入:用户名、密码
- 发送到服务端进行校验。
2. 聊天工具(10086)
1. 服务端
- 接收客户端发送的信息。
- 检查是否有某些指定关键字。
- 回复xx消息
- 回复xx消息
- 回复xx消息
- 回复xx消息
2. 客户端
- 持续
- 问答
- 关闭
作业
1. 整理本周知识点思维导图(可使用:xmind、MindManager或在线平台processon)
2. 接口的作用?
3. 抽象类和抽象方法的作用?
4. 抽象类加抽象方法 和 接口的区别?
5. python中应该如何约束派生类中指定的方法?
6. 如何自定义异常?
7. md5加密是否可以被反解?
8. 为了防止撞库,md5加密时需要做什么操作并写代码实现。
9. 程序为什么要写日志?
10. 选课系统开发 系统登录需要有三类用户:学生、管理员、讲师,针对不用用户提供不
同功能:
学生用户 :对于学生用户来说,登陆之后有三个功能
1、查看所有课程
2、选择课程
3、查看所选课程
4、删除已选课程
管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作。
1、创建课程
2、创建学生学生账号
3、查看所有课程
4、查看所有学生
5、查看所有学生的选课情况
# by luffycity.com import socket server = socket.socket() server.bind(('localhost',8001)) server.listen(5) """ 2. 聊天工具(10086) 1. 服务端 - 接收客户端发送的信息。 - 检查是否有某些指定关键字。 - 回复xx消息 - 回复xx消息 - 回复xx消息 - 回复xx消息 2. 客户端 - 持续 - 问答 - 关闭""" while True: conn,addr = server.accept() # 字节类型 data_dict={"天气":"晴朗","位置":"上海","公司":"迅联"} while True: data = conn.recv(1024).decode("utf-8") # 阻塞 print(data) if data=="exit": break try: if data_dict[data]: conn.send(data_dict[data].encode("utf-8")) except KeyError as e: conn.send("对不起,请你重新查询要查询的信息: ".encode("utf-8")+data.encode("utf-8")) conn.close() -------------- # by luffycity.com import socket sk = socket.socket() sk.connect(('localhost',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()