day20 作业
今日作业
1、下面这段代码的输出结果将是什么?请解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
# 终端打印结果----------------------
1 1 1
1 2 1
3 2 3
# 解释:----------------------
print(Parent.x, Child1.x, Child2.x) 打印父类、子类1、子类2的属性x:1 1 1
Child1.x = 2 修改了Child1对象(子类)名称空间中的x值,其他对象(Parent、Child2)不受影响的,打印:1 2 1
Parent.x = 3 修改了父类的名称空间的属性x值,那么子类继承父类,对应的属性值也会改变,Child1名称空间修改为2,与其他对象无关,打印:3 2 3
2、多重继承的执行顺序,请解答以下输出结果是什么?并解释。
class A(object):
def __init__(self):
print('A')
super(A, self).__init__()
class B(object):
def __init__(self):
print('B')
super(B, self).__init__()
class C(A):
def __init__(self):
print('C')
super(C, self).__init__()
class D(A):
def __init__(self):
print('D')
super(D, self).__init__()
class E(B, C):
def __init__(self):
print('E')
super(E, self).__init__()
class F(C, B, D):
def __init__(self):
print('F')
super(F, self).__init__()
class G(D, B):
def __init__(self):
print('G')
super(G, self).__init__()
if __name__ == '__main__':
g = G()
f = F()
# 终端打印结果----------------------
G
D
A
B
F
C
B
D
A
# 解释:----------------------
运行G() 的打印顺序:G->D->A->B
运行F() 的打印顺序:F->c->B->D->A
两者都是新式类,按照广度优先原则
g = G():先纵观全部类-A类和B类没有继承关系,首先打印G本身,然后使用super()函数调用父类D,打印D,父类D又使用super()函数调用父类A,打印A,返回至G的第二个父类B,打印B。
f = F():先纵观全部类-C类和D类同时继承A类,首先打印F,同理广度优先,A类将排到最后去找。
利用mro函数可以查看继承的顺序
print(G.__mro__)
print(F.__mro__)
(<class '__main__.G'>, <class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
(<class '__main__.F'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.A'>, <class 'object'>)
3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?
经典类:没有继承object类的,深度优先查找
新式类:继承有object类的,广度优先查找
区别:是否继承object类,在多继承的情况下继承顺序不同
经典类是纵向查找,直接继承下去最后的一个类里面找
新式类是横向查找,会纵观全部类直到最后的一个类继承有object才去里面找
4、用面向对象的形式编写一个老师类, 老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
'''
用面向对象的形式编写一个老师类,
老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
1.生成老师唯一编号的功能,
可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为老师的编号
2.获取老师所有信息
3.将老师对象序列化保存到文件里,文件名即老师的编号,提示功能如下
4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象,提示功能如下
5、按照定义老师的方式,再定义一个学生类
'''
import pickle
import hashlib
# 6、抽象老师类与学生类得到父类,用继承的方式减少代码冗余
class People(object):
def __init__(self,name,sex,age):
self.name = name
self.sex =sex
self.age = age
# 老师类
class Teacher(People):
def __init__(self,name,sex,age,level,salary):
super().__init__(name,sex,age)
self.level = level
self.salary = salary
# 1.生成老师唯一编号的功能,
def create_id(self):
str = self.name + self.sex + self.age + self.level + self.salary
self.id = hashlib.md5(str.encode("utf8")).hexdigest()
return self.id
# 2.获取老师所有信息
def tell_info(self):
info = f"""
老师编号 {self.id}
老师名字 {self.name}
老师性别 {self.sex}
老师年龄 {self.age}
老师等级 {self.level}
老师薪资 {self.salary}
"""
return info
# 3.将老师对象序列化保存到文件里,文件名即老师的编号,提示功能如下
def save(self):
file = f"{self.id}_{self.name}" + ".pick"
tea_dic = {
"name": self.name,
"sex": self.sex,
"age": self.age,
"level": self.level,
"salary": self.salary
}
with open(file, 'wb') as f:
pickle.dump(tea_dic, f)
# 文件名 9fd0ebd7fa0e6abd13066063db3a5bbb_tank.pick
# 4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象,提示功能如下
def get_obj_by_id(self):
file = f"{self.id}_{self.name}" + ".pick"
with open(file,"rb") as f:
data = pickle.load(f)
print(data.get("name"))
tea1 = Teacher("tank","男","18","10","3000")
# 1.生成老师唯一编号的功能,
# 可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为老师的编号
id = tea1.create_id()
print(id)
# 2.获取老师所有信息
info = tea1.tell_info()
print(info)
# 3.将老师对象序列化保存到文件里,文件名即老师的编号,提示功能如下
tea1.save()
# 4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象,提示功能如下
tea1.get_obj_by_id()
# 学生类
class Student(People):
def __init__(self,name,sex,age,course):
super().__init__(name,sex,age)
self.course = course
# 1.生成学生唯一编号的功能,
def create_id(self):
str = self.name + self.sex + self.age + self.course
self.id = hashlib.md5(str.encode("utf8")).hexdigest()
return self.id
# 2.获取学生所有信息
def tell_info(self):
info = f"""
学生编号 {self.id}
学生名字 {self.name}
学生性别 {self.sex}
学生年龄 {self.age}
学生课程 {self.course}
"""
return info
# 3.将学生对象序列化保存到文件里,文件名即学生的编号,提示功能如下
def save(self):
file = f"{self.id}_{self.name}" + ".pick"
stu_dic = {
"name": self.name,
"sex": self.sex,
"age": self.age,
"course": self.course,
}
with open(file, 'wb') as f:
pickle.dump(tea_dic, f)
# 4.从文件夹中取出存储学生对象的文件,然后反序列化出学生对象,提示功能如下
def get_obj_by_id(self):
file = f"{self.id}_{self.name}" + ".pick"
with open(file,"rb") as f:
data = pickle.load(f)
print(data.get("name"))
stu1 = Student("qinyj","男","18","python")
# 1.生成学生唯一编号的功能,
# 可以用hashlib对当前时间加上学生的所有信息进行校验得到一个hash值来作为学生的编号
id = stu1.create_id()
print(id)
# 2.获取学生所有信息
info = stu1.tell_info()
print(info)
# 3.将学生对象序列化保存到文件里,文件名即学生的编号,提示功能如下
stu1.save()
# 4.从文件夹中取出存储学生对象的文件,然后反序列化出学生对象,提示功能如下
stu1.get_obj_by_id()
终端打印:
9fd0ebd7fa0e6abd13066063db3a5bbb
老师编号 9fd0ebd7fa0e6abd13066063db3a5bbb
老师名字 tank
老师性别 男
老师年龄 18
老师等级 10
老师薪资 3000
tank
50450f287fbf32935f348f056dd088c3
学生编号 50450f287fbf32935f348f056dd088c3
学生名字 qinyj
学生性别 男
学生年龄 18
学生课程 python
qinyj
day20 作业的更多相关文章
- Day20作业及默写
1.请使用C3算法计算出链接图中的继承顺序-Link 一 graph BT id1[A]-->id2[B] id2[B]-->id6[F] id6[F]-->id7[G] id1[A ...
- day20作业
1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): ...
- day20模块作业
1.模块化作业 1.回顾文件递归遍历. 默写一遍. 入口在: 当文件是个文件夹的时候 出口在: 文件是一个文件 2.计算时间差(用户输入起始时间和结束时间. 计算时间差(小时), 例如, 用户输入20 ...
- day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor
Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_res ...
- python 作业
Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...
- python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
- SQLServer2005创建定时作业任务
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
- 使用T-SQL找出执行时间过长的作业
有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下: SELECT sj.name , ...
- T-SQL检查停止的复制作业代理,并启动
有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...
随机推荐
- RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)
摘要: 事务消息提交或回滚的实现原理就是根据commitlogOffset找到消息,如果是提交动作,就恢复原消息的主题与队列,再次存入commitlog文件进而转到消息消费队列,供消费者消费,然后将原 ...
- luoguP1154 奶牛分厩 [数论]
题目描述 农夫约翰有N(1<=N<=5000)头奶牛,每头奶牛都有一个唯一的不同于其它奶牛的编号Si,所有的奶牛都睡在一个有K个厩的谷仓中,厩的编号为0到K-1.每头奶牛都知道自己该睡在哪 ...
- TopCoder[SRM513 DIV 1]:PerfectMemory(500)
Problem Statement You might have played the game called Memoria. In this game, there is a board ...
- Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄
有了回调函数的概念及上面的例子,我们可以继续了.其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.其函数原形是:function FindWindow(lpClass ...
- pca算法实现
pca基础知识不了解的可以先看下一这篇博客:https://www.cnblogs.com/lliuye/p/9156763.html 具体算法实现如下: import numpy as np imp ...
- OBJC依赖库管理利器cocoapods 安装及使用详细图解
cocoapods: github:https://github.com/CocoaPods/CocoaPods 官方网站:http://www.cocoapods.org/ 1.安装 RubyGem ...
- 20175323《Java程序设计》第二周学习总结
一.教材学习内容总结 标识符第一个字符不能是数字且区分大小写数据类型转换时只允许把精度低的给精度高的,否则必须强制转换输入数据语法 Scanner reader = new Scanner(Syste ...
- (37)C#Linq
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/let-clause 一.定义 Linq(Lang ...
- hdu-1394(线段树求最小逆序数)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意: 给定一个n,然后又n个数字,首先,这些数字的大小是从0开始到n-1,比如样例n=10,则这十个数就 ...
- 无法启动此程序,因此计算机中丢失VCRUNTIME140.dll。
在mysql-8.0.12-winx64创建data文件夹 在cmd终端 初始化 MYSQL: mysqld --initialize-insecure MySQL加入Windows服务:mysqld ...