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作业的更多相关文章

  1. day 20 作业

    作业 1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent ...

  2. SQL作业的操作全

    --定义创建作业 转自http://hi.baidu.com/procedure/blog/item/7f959fb10d76f95d092302dd.html DECLARE @jobid uniq ...

  3. SQL作业及调度创建

    转自:http://www.cnblogs.com/accumulater/p/6223909.html --定义创建作业 转自http://hi.baidu.com/procedure/blog/i ...

  4. 【MOOC操作系统】测试题大题-进程调度 先入先服务算法例题 【某多道程序系统供用户使用的主存为100K,磁带机2台,打印机1台,采用可变分区存储管理,静态方式分配外围设备(进程获得所需全部设备才能进入内容),忽略用户作业的I/O时间。采用动态分区、首次匹配法(从低地址区开始)分配主存,一个作业创建一个进程,且运行中不紧缩内存。作业调度采用FCFS算法,在主存中的进程采用剩余时间最短调度算法。】

    分析图: 答案: (1) 8 : 00作业1到达,占有资源并调入主存运行. 8: 20作业2和3同时到达,但作业2因分不到打印机,只能在后备队列等待.作业3资源满足,可进主存运行,并与作业1平分CPU ...

  5. 12-1 上午mysql 基本语句

    create table test( code varchar(20) primary key, name varchar(20)); 关键字primary key 主键非空 not nullfore ...

  6. 0527 python 基础01

    折行的处理 \>>> print "hi \... hello Lucy!"hi hello Lucy! 自然字符串,字符串加上r或R前缀指定>>&g ...

  7. document对象获取例子

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. python 函数动态参数,名称空间,global,nonlocal

    ##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...

  9. Hibernate进行对象的增删改查

    首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1.    创建WEB项目 2       下载hibernate-release-4.3.11.F ...

随机推荐

  1. Docker详解(一)

    目录 Docker简介 Docker组成 永远的HelloWorld 序言:众所周知,近几年的互联网各项技术发展的如火如荼,敏捷开发模式越来越普及,"快"似乎成为了行业的标准,于是 ...

  2. 【Offer】[38] 【字符串的排列】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个字符串,打印出该字符串中字符的所有排列.例如,输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb. ...

  3. 关于JQuery.form.js异步上传文件点滴

    好久没动代码了,前几天朋友委托我帮忙给做几个页面,其中有个注册带图片上传的页面.已之前的经验应该很快就能搞定,没想到的是搞了前后近一天时间.下面就说说异步上传的重要几个点,希望自己下次遇到此类问题的时 ...

  4. 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态

    近日,微众银行联邦学习FATE开源社区迎来了两位新贡献者——来自腾讯的刘洋及秦姝琦,作为云计算安全领域的专家,两位为FATE构造了新的功能点,并在Github上提交修复了相关漏洞.(Github项目地 ...

  5. Python(Head First)学习笔记:三

    3 文件与异常:调试.处理错误.迭代.改进.完善  处理错误:利用Python的异常处理机制来处理异常情况.  程序外部的数据:大多程序基本模型:首先输入数据,进行处理,然后存储.显示.打印或传输. ...

  6. Kafka服务端之网络连接源码分析

    #### 简介 上次我们通过分析KafkaProducer的源码了解了生产端的主要流程,今天学习下服务端的网络层主要做了什么,先看下 KafkaServer的整体架构图 ![file](https:/ ...

  7. android 实现 波纹效果+图片左右无限滑动缩放效果

    项目中用到的 ,记录下.说不定下次又用到了.就提取出来了. 录制效果一般,将就看吧.代码地址如下 https://yunpan.cn/ckQaXMpYwdUnn (提取码:7ac7)

  8. Net基础篇_学习笔记_第十二天_面向对象继承(父类和子类)

    继承 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类.Student.Teacher.Driver 子类  派生类Person         ...

  9. spring scope prototype与singleton区别

    1.singleton作用域  当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配 ...

  10. 反射的应用、获取Class类实例

    *准备工作: 包结构:* ======================= Person.java代码: package com.atguigu.java; public class Person { ...