python定义学生类和教师类_Python3 类的继承小练习
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 类的继承小练习相关推荐
- python类为什么要初始化_python3类对象需要在init中初始化吗?
我们都知道类需要借助类对象才能使用,类对象的作用是不可缺少的.那么,在我们使用类对象的时候需要注意哪些细节呢?比如,有的小伙伴想知道init中需要初始化吗?这个问题不知道大家都考虑了没有,小编已经查阅 ...
- python中def _init_是什么意思_python3类中的def __init()__如何使用?
单个函数的使用小编也写了不少,说起基础的init函数也是我们的老朋友了.组合函数的要么是理解又一定的难度,要么是操作方法有复杂的地方.小编今天要讲的def __init()__属于第一种,只要小伙伴们 ...
- 学生信息管理系统-教师端
前言 基于python的学生信息管理系统-教师端,使用csv文件进行存储数据,操作界面为dos窗口 model.py 用于将StudentInfo.csv文件中的文本数据转换为可操作的对象 ser ...
- 定义一个Teacher(教师)类,和一个Student(学生)类
定义一个Teacher(教师)类,和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别).编写程序,将一个Student对象 转换为Teac ...
- 用python定义一个员工类_python3 类的定义
1.面向过程和面向对象 1.1 面向过程 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的 ...
- 用python定义一个员工类_python类的定义和使用
类的定义: 类是用来描述具有相同的属性和方法的对象的集合.它定义了该集合中的每个对象所共有的属性和方法.对象时类的实例. 二.Python创建类: 使用class语句来创建一个新类,class之后为类 ...
- 定义一个学生类。 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄:ge
python实现:定义一个学生类. 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄 ...
- python 类中定义类_Python中的动态类定义
python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...
- python定义类()中写object和不写的区别
python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...
最新文章
- Obj-C的hello,world 2
- 转载----Python的zip()函数
- 同质化软件“吃掉”创新 企业因何深陷罗网?
- jquery 使用animate来改变高度自动添加样式overflow:hidden的问题
- JFinal开发环境搭建,JFinal开发案例
- 【线上分享】海外超低延时链路设计的挑战与优化实践
- linux系统运维指南 pdf_linux运维:系统监控命令实践
- POJ 1986 Distance Queries(LCA)
- postgresq dur_DUR的完整形式是什么?
- python 微信bot_使用Tweepy在Python中创建Twitter Bot
- C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
- spark学习-Spark的mapPartitions与MapPartitionsWithIndex理解
- java 时间戳_Java并发编程之CAS三CAS的缺点 及解决办法
- 正则表达式学习(2)
- win10 默认程序 edge
- SpringBoot配置多数据源(动态切换)
- python爬虫百度地图_Python抓取百度地图的数据
- 淘宝月度活跃用户近7亿 超70%新增消费者来自下沉市场
- EOF和BOF的区别
- win10底部任务栏无响应 解决办法
热门文章
- R语言中调用windows中的字体方法
- python 无人机、飞机轨迹(含姿态角)可视化方法
- 嵌入式处理器分类与现状
- 微博话题下的数据爬取
- 【引用】免费论文检测 系统 软件 论文免费检测 论文抄袭检测大师 万方数据论文相似性检测系统 万方论文检测...
- 2018最新北风网人工智能全套分享
- 数字逻辑代数基础——基本定理、公式与卡诺图化简法、格雷码、LSFR等
- oracle翻译Advanced,Oracle高级复制,Oracle advanced replication,音标,读音,翻译,英文例句,英语词典...
- 利用NURBS曲线进行点云曲面拟合算法
- 教你使用python做一段魔性的音乐