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 = 2给Child1类添加了派生属性, 属性的搜索顺序是先子类后父类

第三行: Parent.x = 3修改了父类的属性, Child2继承了Parent的x属性, 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

调用类会自动触发__init__函数

新式类的多重继承按从左到右, 广度优先的顺序搜索

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

新式类: 所有继承object的类及其子类都是新式类

经典类: Python2没有继承object的类及其子类都是经典类

深度优先: 当类经典类时, 多重继承时, 会按深度优先的方式查找

广度优先: 当类是新式类时, 多重继承时, 会按广度优先的方式查找

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}

''')

python定义学生类和教师类_Python3 类的继承小练习相关推荐

  1. python类为什么要初始化_python3类对象需要在init中初始化吗?

    我们都知道类需要借助类对象才能使用,类对象的作用是不可缺少的.那么,在我们使用类对象的时候需要注意哪些细节呢?比如,有的小伙伴想知道init中需要初始化吗?这个问题不知道大家都考虑了没有,小编已经查阅 ...

  2. python中def _init_是什么意思_python3类中的def __init()__如何使用?

    单个函数的使用小编也写了不少,说起基础的init函数也是我们的老朋友了.组合函数的要么是理解又一定的难度,要么是操作方法有复杂的地方.小编今天要讲的def __init()__属于第一种,只要小伙伴们 ...

  3. 学生信息管理系统-教师端

    前言   基于python的学生信息管理系统-教师端,使用csv文件进行存储数据,操作界面为dos窗口 model.py 用于将StudentInfo.csv文件中的文本数据转换为可操作的对象 ser ...

  4. 定义一个Teacher(教师)类,和一个Student(学生)类

    定义一个Teacher(教师)类,和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别).编写程序,将一个Student对象 转换为Teac ...

  5. 用python定义一个员工类_python3 类的定义

    1.面向过程和面向对象 1.1 面向过程 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的 ...

  6. 用python定义一个员工类_python类的定义和使用

    类的定义: 类是用来描述具有相同的属性和方法的对象的集合.它定义了该集合中的每个对象所共有的属性和方法.对象时类的实例. 二.Python创建类: 使用class语句来创建一个新类,class之后为类 ...

  7. 定义一个学生类。 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄:ge

    python实现:定义一个学生类. 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄 ...

  8. python 类中定义类_Python中的动态类定义

    python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...

  9. python定义类()中写object和不写的区别

    python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...

最新文章

  1. Obj-C的hello,world 2
  2. 转载----Python的zip()函数
  3. 同质化软件“吃掉”创新 企业因何深陷罗网?
  4. jquery 使用animate来改变高度自动添加样式overflow:hidden的问题
  5. JFinal开发环境搭建,JFinal开发案例
  6. 【线上分享】海外超低延时链路设计的挑战与优化实践
  7. linux系统运维指南 pdf_linux运维:系统监控命令实践
  8. POJ 1986 Distance Queries(LCA)
  9. postgresq dur_DUR的完整形式是什么?
  10. python 微信bot_使用Tweepy在Python中创建Twitter Bot
  11. C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
  12. spark学习-Spark的mapPartitions与MapPartitionsWithIndex理解
  13. java 时间戳_Java并发编程之CAS三CAS的缺点 及解决办法
  14. 正则表达式学习(2)
  15. win10 默认程序 edge
  16. SpringBoot配置多数据源(动态切换)
  17. python爬虫百度地图_Python抓取百度地图的数据
  18. 淘宝月度活跃用户近7亿 超70%新增消费者来自下沉市场
  19. EOF和BOF的区别
  20. win10底部任务栏无响应 解决办法

热门文章

  1. R语言中调用windows中的字体方法
  2. python 无人机、飞机轨迹(含姿态角)可视化方法
  3. 嵌入式处理器分类与现状
  4. 微博话题下的数据爬取
  5. 【引用】免费论文检测 系统 软件 论文免费检测 论文抄袭检测大师 万方数据论文相似性检测系统 万方论文检测...
  6. 2018最新北风网人工智能全套分享
  7. 数字逻辑代数基础——基本定理、公式与卡诺图化简法、格雷码、LSFR等
  8. oracle翻译Advanced,Oracle高级复制,Oracle advanced replication,音标,读音,翻译,英文例句,英语词典...
  9. 利用NURBS曲线进行点云曲面拟合算法
  10. 教你使用python做一段魔性的音乐