day 20作业
目录
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
打印parent,父类里面存在X = 1,所以打印1;
child1.x,子类自身不存在x,则去父类parent寻找x,打印1;
child2.x,子类自身不存在x,则去父类parent寻找x,打印1;
## 1 2 1
打印parent,父类存在X = 1,打印1;
child1.x = 2,被赋值,child1.x优先在自身寻找,找到x,打印2;
child2.x,没有被赋值,子类先查找自身没有,则去父类查找,打印1;
## 3 2 3
父类parent被从新赋值3,所以查找自己,打印3;
child1.x刚刚被赋值2,优先查找自己,找到则优先使用自己,打印2;
child2.x没有被赋值,优先查找自己没有找到,则去父类查找,则打印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 F的父类遵循从左到右依次查找打印)
## 继承多个父类 g: G D A B f:F C A B D A
## g: 打印G>寻找D>打印D>寻找A>打印A;
## 寻找B>打印B
## f:方法同上, 打印F>寻找C>打印C>寻找A>打印A;
## 寻找B>打印B;
## 寻找D>打印D>寻找A;
3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?
解答:
## 新式类:继承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、按照定义老师的方式,再定义一个学生类
6、抽象老师类与学生类得到父类,用继承的方式减少代码冗余
解答:
import pickle
import hashlib
import time
class BaseClass(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
self.create_id()
self.save()
def create_id(self):
m = hashlib.md5()
format_time = time.strftime("%Y-%m-%d %X")
m.update(format_time.encode('utf8'))
self.id = str(m.hexdigest())
self.save()
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'))
class Teacher(BaseClass):
def __init__(self, name, sex, age, level, salary):
super().__init__(name, sex, age)
self.level = level
self.salary = salary
def tell_info(self):
print(super().get_obj_by_id().__dict__)
def change_playbaskball(self):
print(f'老师[{self.name} 打篮球...]')
class Student(BaseClass):
def __init__(self, name, sex, age, course):
super().__init__(name, sex, age)
self.course = course
def change_playpeople(self):
print(f'学生[{self.name} 打人...]')
t1 = Teacher('nick', 'man', 18, 11, 10100)
print(t1.get_obj_by_id().__dict__)
day 20作业的更多相关文章
- day 20 作业
作业 1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent ...
- SQL作业的操作全
--定义创建作业 转自http://hi.baidu.com/procedure/blog/item/7f959fb10d76f95d092302dd.html DECLARE @jobid uniq ...
- SQL作业及调度创建
转自:http://www.cnblogs.com/accumulater/p/6223909.html --定义创建作业 转自http://hi.baidu.com/procedure/blog/i ...
- 【MOOC操作系统】测试题大题-进程调度 先入先服务算法例题 【某多道程序系统供用户使用的主存为100K,磁带机2台,打印机1台,采用可变分区存储管理,静态方式分配外围设备(进程获得所需全部设备才能进入内容),忽略用户作业的I/O时间。采用动态分区、首次匹配法(从低地址区开始)分配主存,一个作业创建一个进程,且运行中不紧缩内存。作业调度采用FCFS算法,在主存中的进程采用剩余时间最短调度算法。】
分析图: 答案: (1) 8 : 00作业1到达,占有资源并调入主存运行. 8: 20作业2和3同时到达,但作业2因分不到打印机,只能在后备队列等待.作业3资源满足,可进主存运行,并与作业1平分CPU ...
- 12-1 上午mysql 基本语句
create table test( code varchar(20) primary key, name varchar(20)); 关键字primary key 主键非空 not nullfore ...
- 0527 python 基础01
折行的处理 \>>> print "hi \... hello Lucy!"hi hello Lucy! 自然字符串,字符串加上r或R前缀指定>>&g ...
- document对象获取例子
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- python 函数动态参数,名称空间,global,nonlocal
##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...
- Hibernate进行对象的增删改查
首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1. 创建WEB项目 2 下载hibernate-release-4.3.11.F ...
随机推荐
- redis数据库学习
0 使用理由 0.1 高性能 纯内存操作,比在硬盘操作数据的速度有极大提升 0.2 高并发 承受请求比直接操作数据库大得多 0.3 单线程 至于redis单线程的原因.有点意思.CPU不是Redis的 ...
- text2pcap: 将hex转储文本转换为Wireshark可打开的pcap文件
简介 Text2pcap是一个读取ASCII hex转储的程序,它将描述的数据写入pcap或pcapng文件.text2pcap可以读取包含多个数据包的hexdumps,并构建多个数据包的捕获文件.t ...
- SpringDataJpa——JpaRepository查询功能(转)
1.JpaRepository支持接口规范方法名查询.意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下. Keyword Sample JPQL snippet ...
- HBase读延迟的12种优化套
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少. 总 ...
- Nginx正确配置Location
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 之前已经讲过Nginx的基本配置,本篇文章主要对Nginx中Location指令的作用进行介绍.本篇文章主要对 ...
- iOS上架的整体流程和建议
App Store上架指的是iOS应用从提交申请到上线的整个过程,它的目的是让应用展示在App Store上获取流量.用户. 一.iOS上架的整体流程 1.申请开发者账号 苹果的开发者账号主要分为三种 ...
- FEDay会后-Serverless与云开发,可能是前端的下一站
进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...
- ORA-08102异常重现及恢复
现象: 在表上面新建主键报ORA-08102的异常: SQL> alter table t add primary key(id); alter table t add primary key( ...
- Spring框架学习笔记(1)——控制反转IOC与依赖注入DI
Spring框架的主要作用,就是提供了一个容器,使用该容器就可以创建并管理对象.比如说Dao类等,又或者是具有多依赖关系的类(Student类中包含有Teacher类的成员变量) Spring有两个核 ...
- 【面试】足够“忽悠”面试官的『Spring事务管理器』源码阅读梳理(建议珍藏)
PS:文章内容涉及源码,请耐心阅读. 理论实践,相辅相成 伟大领袖毛主席告诉我们实践出真知.这是无比正确的.但是也会很辛苦. 就像淘金一样,从大量沙子中淘出金子一定是一个无比艰辛的过程.但如果真能淘出 ...