day20作业
1、下面这段代码的输出结果将是什么?请解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
# 输出结果为:1,1,1,
# 原因:Child1和Child2的父类都是Parent,且其中均没有变量x,因此都会找到Parent中的变量x值
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
# 输出结果为:1,2,1
# 原因:此时Child2中有了x变量,在查找属性时,子类中找到就不会从父类中再找了
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
# 输出结果为:3,2,3
# 原因:父类Parent中x变量改变,相应,Child2也会输出父类中的x值
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()中因为后续的类没有再指向A的父类,因此会直接查找到A,B是最后一个后续的类,因此会直接查找到B
- 再F()中存在后续的D类会指向类A,因此再C之后不会再去A中查找
- 而直接去B中查找,后续的类D指向的不是类B,因此会直接去B中查找
- D是最后一个后续的类,因此会去指向object的类A中查找
3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?
- 继承object的类以及其子类成为新式类
- 没有继承object的类以及其子类成为经典类
- python3中所有的类默认继承object,因此都是新式类
- 只有在python2中才有经典类的存在
- 多继承情况下,当类是经典类时,按照深度优先查找;当类是新式类时按照广度优先查找
- 深度优先是指:在首轮查找时,会直接查找到最后一个的父类,后续的查找便会默认不去最后一个父类查找
- 广度优先是指:如果在继承的类中,由多个指向最后一个父类的类,那么只会在最后一个继承的类的查找时会去那个最后一个父类中的查找
4、用面向对象的形式编写一个老师类, 老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
1.生成老师唯一编号的功能,可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为老师的编号
def create_id(self):
pass
2.获取老师所有信息
def tell_info(self):
pass
3.将老师对象序列化保存到文件里,文件名即老师的编号,提示功能如下
def save(self):
with open('老师的编号','wb') as f:
pickle.dump(self,f)
4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象,提示功能如下
def get_obj_by_id(self,id):
return pickle.load(open(id,'rb'))
5、按照定义老师的方式,再定义一个学生类
import pickle
import hashlib
import time
class Teacher:
def __init__(self,name,sex,age,level,sal):
self.name = name
self.sex = sex
self.age = age
self.level = level
self.sal = sal
def create_id(self):
time_now = time.time()
teach_str = str(time_now) + self.name + self.sex + str(self.age) + self.level + str(self.sal)
id = hashlib.md5(teach_str.encode('utf-8')).hexdigest()
self.id = id
def tell_info(self):
print(f'''
编号:{self.id}
姓名:{self.name}
性别:{self.sex}
年龄:{self.age}
等级:{self.level}
薪资:{self.sal}''')
def save(self):
with open(self.id,'wb') as f:
pickle.dump(self,f)
def get_obj_by_id(self):
return pickle.load(open(self.id,'rb')).__dict__
tea = Teacher('wick','男',24,'牛逼',10000)
tea.create_id()
tea.tell_info()
class Student:
def __init__(self,name,sex,age,duty,grade):
self.name = name
self.sex = sex
self.age = age
self.duty = duty
self.grade = grade
def create_id(self):
time_now = time.time()
teach_str = str(time_now) + self.name + self.sex + str(self.age) + self.duty + str(self.grade)
id = hashlib.md5(teach_str.encode('utf-8')).hexdigest()
self.id = id
def tell_info(self):
print(f'''
学号:{self.id}
姓名:{self.name}
性别:{self.sex}
年龄:{self.age}
职务:{self.duty}
成绩:{self.grade}''')
def save(self):
with open(self.id,'wb') as f:
pickle.dump(self,f)
def get_obj_by_id(self):
return pickle.load(open(self.id,'rb')).__dict__
stu = Student('阿峰','人妖',35,'学生','奇差无比')
stu.create_id()
stu.tell_info()
6、抽象老师类与学生类得到父类,用继承的方式减少代码冗余
import pickle
import hashlib
import time
class People:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
self.id = self.create_id()
def create_id(self):
time_now = time.time()
teach_str = str(time_now) + self.name + self.sex + str(self.age)
id = hashlib.md5(teach_str.encode('utf-8')).hexdigest()
self.id = id
def save(self):
with open(self.id,'wb') as f:
pickle.dump(self,f)
def get_obj_by_id(self):
return pickle.load(open(self.id,'rb')).__dict__
class Teacher(People):
def __init__(self,name ,sex,age,level,sal):
super().__init__(name,sex,age)
self.level = level
self.sal = sal
def tell_info(self):
print(f'''
编号:{self.id}
姓名:{self.name}
性别:{self.sex}
年龄:{self.age}
等级:{self.level}
薪资:{self.sal}''')
class Student(People):
def __init__(self,name ,sex,age,duty,grade):
super().__init__(name,sex,age)
self.duty = duty
self.grade = grade
def tell_info(self):
print(f'''
学号:{self.id}
姓名:{self.name}
性别:{self.sex}
年龄:{self.age}
职务:{self.duty}
成绩:{self.grade}''')
tea = Teacher('wick','男',24,'牛逼',15000)
stu = Student('阿峰','人妖',35,'学生','奇差无比')
tea.create_id()
stu.create_id()
tea.tell_info()
stu.tell_info()
day20作业的更多相关文章
- Day20作业及默写
1.请使用C3算法计算出链接图中的继承顺序-Link 一 graph BT id1[A]-->id2[B] id2[B]-->id6[F] id6[F]-->id7[G] id1[A ...
- day20 作业
目录 今日作业 1.下面这段代码的输出结果将是什么?请解释. 2.多重继承的执行顺序,请解答以下输出结果是什么?并解释. 3.什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先 ...
- 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检查停止的复制作业代理,并启动
有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...
随机推荐
- Django+MySQL Dashboard 网页端数据库可视化
1. Overview Python+MySQL+Django, 有些数据托管在 MySQL 的数据库,然后我们希望进行可视化,通过 web 的方式对数据库的信息去进行展示/检索/维护/.. 这个项目 ...
- jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)
关于构建结束后jenkins会kill所有衍生子进程的官方解决方案:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+bu ...
- selenium-03-02操作元素-等待
1.最直接普通的方式:这个是设置固定的等待时间 Thread.sleep(1000); 2.隐式等待方式(implicitlyWait):设置脚本在查找元素时的最大等待时间: driv ...
- 基于计算机操作系统的Linux的进程管理
一.实验目的 1.熟悉和理解进程和进程树的概念,掌握有关进程的管理机制. 2.了解进程与程序.并行与串行执行的区别. 3.掌握使用Linux命令管理和操作进程的方法 二.实验内容 1. 用ps命令观察 ...
- DocumentFormat.OpenXml read excel file
这里向大家介绍一种读取excel 数据的方法,用的是DoucmentFormat.OpenXml.dll 废话不多说,向大家展示一下在项目中处理过的方法,如果有任何疑问,随时联系我. using Do ...
- 阿里云服务器CentOS6.9安装JDK
1:首先查看系统有没有自带jdk rpm -qa | grep java 2:将存在的一一卸载 rpm -ev java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el6_9. ...
- 快学Scala 第二十一课 (初始化trait的抽象字段)
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...
- .Net TCP探索(一)——TCP服务端开发(同时监听多个客户端请求)
最近在园子里看了大神写的(面试官,不要再问我三次握手和四次挥手),忍不住写段程序来测试一番. 在网上找了很多例子,大多只实现了TCP点对点通讯,但实际应用中,一个服务器端口往往要监听多 ...
- 『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)
本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 ...
- 基于KVM的SRIOV直通配置及性能测试
SRIOV介绍.VF直通配置,以及包转发率性能测试 小慢哥的原创文章,欢迎转载 目录 ▪ 1. SRIOV介绍 ▪ 2. 环境说明 ▪ 3. 开启SRIOV ▪ 4. 生成VF ▪ 5. VF直通 ▪ ...