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

第一行: 子类会继承父类的属性

第二行: Child1.x = 2Child1类添加了派生属性, 属性的搜索顺序是先子类后父类

第三行: Parent.x = 3修改了父类的属性, Child2继承了Parentx属性, Child1优先使用自身的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

  1. 调用类会自动触发__init__函数
  2. 新式类的多重继承按从左到右, 广度优先的顺序搜索

3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?

  1. 新式类: 所有继承object的类及其子类都是新式类
  2. 经典类: Python2没有继承object的类及其子类都是经典类
  3. 深度优先: 当类经典类时, 多重继承时, 会按深度优先的方式查找
  4. 广度优先: 当类是新式类时, 多重继承时, 会按广度优先的方式查找

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 hashlib
import time
import pickle # 老师类
class PyTeacher:
def __init__(self, name, gender, age, level, salary):
self.name = name
self.gender = gender
self.age = age
self.level = level
self.salary = salary
self.id = self.creat_id() def creat_id(self):
raw_id = str(time.time()) + self.name + self.gender + str(self.age) + str(self.level) + str(self.salary)
id = hashlib.md5(raw_id.encode()).hexdigest()
return id def teach(self):
print('teaching Python...') def tell_info(self):
print(f'ID:{teacher.id}, name:{teacher.name}, gender:{teacher.gender}, age:{teacher.age}, level:{teacher.level}, salary:{teacher.salary}') def save(self):
with open(self.id, 'wb') as f:
pickle.dump(self, f)
print('done!') def get_obj_by_id(self):
return pickle.load(open(self.id, 'rb')) teacher = PyTeacher('龟叔', 'male', 18, 10, 0) # 学生类
class PyStudent:
def __init__(self, name, gender, age, class_no, score):
self.name = name
self.gender = gender
self.age = age
self.class_no = class_no
self.score = score
self.id = self.creat_id() def creat_id(self):
raw_id = str(time.time()) + self.name + self.gender + str(self.age) + str(self.class_no) + str(self.score)
id = hashlib.md5(raw_id.encode()).hexdigest()
return id def learn(self):
print('learning Python...') def tell_info(self):
print(f'''
ID:{self.id},
name:{self.name},
gender:{self.gender},
age:{self.age},
class:{self.class_no},
score:{self.score}
''') def save(self):
with open(self.id, 'wb') as f:
pickle.dump(self, f)
print('done!') def get_obj_by_id(self):
return pickle.load(open(self.id, 'rb'))

5、抽象老师类与学生类得到父类,用继承的方式减少代码冗余

class PyMan:
language = 'Python' def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender def save(self):
with open(self.id, 'wb') as f:
pickle.dump(self, f)
print('done!') def get_obj_by_id(self):
return pickle.load(open(self.id, 'rb')) # 老师类
class PyTeacher(PyMan):
def __init__(self, name, age, gender, level, salary):
super().__init__(self, name, age, gender)
self.level = level
self.salary = salary
self.id = self.creat_id() def creat_id(self):
raw_id = str(time.time()) + self.name + self.gender + str(self.age) + str(self.level) + str(self.salary)
id = hashlib.md5(raw_id.encode()).hexdigest()
return id def teach(self):
print('teaching Python...') def tell_info(self):
print(f'''
ID:{teacher.id},
name:{teacher.name},
gender:{teacher.gender},
age:{teacher.age},
level:{teacher.level},
salary:{teacher.salary}
''') # 学生类
class PyStudent(PyMan):
def __init__(self, name, age, gender, class_no, score):
super().__init__(self, name, age, gender)
self.class_no = class_no
self.score = score
self.id = self.creat_id() def learn(self):
print('learning Python...') def tell_info(self):
print(f'''
ID:{self.id},
name:{self.name},
gender:{self.gender},
age:{self.age},
class:{self.class_no},
score:{self.score}
''')

Python3 类的继承小练习的更多相关文章

  1. Python3 类的继承

    目录 继承的基本概念 什么是继承 继承有什么用 如何实现继承 初识继承 寻找继承关系 如何寻找继承关系 实例演示 继承背景下的对象属性查找顺序 派生 新式类和经典类 钻石继承 通过继承实现修改json ...

  2. Python3 类和继承和组合

    import random as r class Fish: def __init__(self): self.x = r.randint(0,10) self.y = r.randint(0,10) ...

  3. python3 类的属性、方法、封装、继承及小实例

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  4. Python3 面向对象-类的继承与派生

    1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...

  5. python3 入门 (四) 类与继承

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  6. Java类的继承与方法调用的一个小问题

    public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...

  7. PYTHON3中 类的继承

    继承 1:什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,也就是说在python中支持一个儿子继承多个爹. 新建的类成为子类或者派生类. 父类又可以成为基类或者 ...

  8. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  9. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

随机推荐

  1. 命令序列 ; & && ||

    ; 从左到右依次被执行,返回最后一个命令的执行状态 & 该命令将在后台被执行,即在子bash中执行(或ctrl+z,bg, jobs,bg 命令号)(变量$!.$one.$two.$three ...

  2. java中的string对象深入了解

    这里来对Java中的String对象做一个稍微深入的了解. Java对象实现的演进 String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以 ...

  3. JVM集训-----内存结构

    一.程序计数器/PC寄存器 (Program Counter Registe) 用于保存当前正在执行的程序的内存地址(下一条jvm指令的执行地址),由于Java是支持多线程执行的,所以程序执行的轨迹不 ...

  4. vim-plug golang定义跳转godef

    go get -v github.com/rogpeppe/godef go install -v github.com/rogpeppe/godef ~/.config/nvim/init.vim ...

  5. 如何进行Flink项目构建,快速开发Flink应用程序?

    项目模板 Flink应用项目可以使用Maven或SBT来构建项目,Flink针对这些构建工具提供了相应项目模板. Maven模板命令如下,我们只需要根据提示输入应用项目的groupId.artifac ...

  6. JAVA数组翻转

    首先可 public class RevcArr { public static void main(String[] args) { // TODO Auto-generated method st ...

  7. 【Luogu P3379】LCA问题的倍增解法

    Luogu P3379 题意:对于两个节点,寻找他们的最近公共祖先. 一个显而易见的解法是对于每一个节点我们都往上遍历一遍,记录下它每一个祖先,然后再从另一个节点出发,一步一步往上走,找到以前记录过第 ...

  8. css优先级之important

    css优先级之important

  9. 《浅入浅出》-RocketMQ

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点脑图.个人联系方式和技术交流群,欢迎Star和指 ...

  10. Tensorflow常用函数说明

    1.矩阵操作 1.1矩阵生成 这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等 sess=tf.InteractiveSession() #x=tf.ones([2,3],tf ...