python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例
1 class Date: #定义时间类,包含姓名、年、月、日,用于返回生日
2 def __init__(self,name,year,mon,day):
3 self.name = name
4 self.year=year
5 self.mon=mon
6 self.day=day
7 def tell_birth(self):
8 print('%s:%s-%s-%s'%(self.name,self.year,self.mon,self.day))
9
10
11 class Course: #定义课程类,包含姓名,课程名、价格,用于返回学生报的课程信息或老师的教学信息
12 def __init__(self,name,price,period):
13 self.name=name
14 self.price=price
15 self.period=period
16 def tell_course(self):
17 print('''
18 --------%s course info------------
19 course name:%s
20 course price:%s
21 course period:%s
22 '''%(self.name,self.name,self.price,self.period))
23 class People: #定义父类People,减少学生类和老师类的代码量
24 def __init__(self,name,age,sex,year,mon,day):
25 self.name=name
26 self.age=age
27 self.sex=sex
28 self.courses=[] #用于存放课程名称,如果没有这个默认值,下边course_info可以用if判断
29 self.birth=Date(name,year,mon,day)
30 def walk(self):
31 print('%s is walking' %self.name)
32 def course_info(self): #
33 # if 'courses' in self.__dict__: 可以是判断对象是否包含课程信息,加个默认值就肯定有courses
34 for obj in self.courses: #循环查看课程信息,即课程对象的tell_course属性
35 obj.tell_course()
36 class Teacher(People):
37 def __init__(self,name,age,sex,salary,level,year,mon,day):
38 People.__init__(self,name,age,sex,year,mon,day) #因为父类的初始化需要这些参数,如果不初始化会报错
39 self.salary=salary
40 self.level=level
41 def teach(self):
42 print('%s is teaching' %self.name)
43 def tell_info(self):
44 print('''
45 --------------%s info--------------
46 NAME:%s
47 AGE:%s
48 SEX:%s
49 SAL:%s
50 LEVEL:%s
51 '''%(self.name,self.name,self.age,self.sex,self.salary,self.level))
52
53 class Student(People):
54 def __init__(self,name,age,sex,group,year,mon,day):
55 People.__init__(self,name, age, sex,year,mon,day)
56 self.group=group
57 def tell_info(self):
58 print('''
59 --------------%s info--------------
60 NAME:%s
61 AGE:%s
62 SEX:%s
63 GROUP:%s
64 '''%(self.name,self.name,self.age,self.sex,self.group))
测试验证:
1 bob=Teacher('bob',84,'female',300000,-1,1994,5,27)
2 print(bob.__dict__)
3 #输出
4 {'name': 'bob', 'age': 84, 'sex': 'female', 'courses': [], 'birth': <__main__.Date object at 0x000001E117677278>, 'salary': 300000, 'level': -1}
5
6 bob.birth.tell_birth()
7 #输出
8 bob:1994-5-27
9
10 python=Course('Python',15800,'5month') #定义课程对象
11 linux=Course('Linux',12800,'4month')
12 bob.courses.append(python) #将课程对象加到bob的课程列表中
13 bob.courses.append(linux)
14 bob.course_info() #调用bob的course_info属性,循环输出课程对象的tell_course属性,如果课程列表中没有课程对象,那么就没有输出
15 #输出
16 --------Python course info------------
17 course name:Python
18 course price:15800
19 course period:5month
20
21
22 --------Linux course info------------
23 course name:Linux
24 course price:12800
25 course period:4month
26
27 # bob.courses[0].tell_course(),这是用很low的方法查看课程信息
对象的序列化和反序列化
py对象的序列化是基于pickle模块完成的,pickle模块支持所有的py数据的序列化,json模块只能够支持各种编程语言通用的数据类型
对象基于文件反序列化,需要生成该对象的类存在于内存中,并且没有被隔离
序列化示例:
创建类文件
1 #创建student_class.py文件,定义一个类
2 class Student:
3 def __init__(self, name, age, sex, group):
4 self.name=name
5 self.age=age
6 self.sex=sex
7 self.group=group
8 def study(self):
9 print('%s is study' % self.name)
10 def tell_info(self):
11 print('''
12 ----------%s info---------
13 NAME:%s
14 AGE:%s
15 SEX:%s
16 group:%s
17 ''' %(self.name,self.name,self.age,self.sex,self.group))
创建序列化执行文件:二进制写入的文件student.pkl需要用二进制方式才能打开
1 #创建serialize.py文件
2 import pickle #导入pickle模块
3 import student_class #导入上面的类模块
4 with open('student.pkl','wb') as file:
5 student1=student_class.Student('bob',15,'male','T3') #创建对象
6 pickle.dump(student1,file) #序列化对象写入文件student.pkl
创建反序列化文件:
1 #创建反序列化执行文件deserialize.py
2 import pickle
3 import student_class
4 with open('student.pkl','rb') as file:
5 print(file.read())
6 #测试输出结果:
7 # b'\x80\x03cstudent_class\nStudent\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00bobq\x04X\x03\x00\x00\x00ageq\x05K\x0fX\x03\x00\x00\x00sexq\x06X\x04\x00\x00\x00maleq\x07X\x05\x00\x00\x00groupq\x08X\x02\x00\x00\x00T3q\tub.'
8 bob=pickle.load(file) #用load反序列化不能fild.read(),否则会提示EOFError:Ran out of input,因为file.read()已经将文件读完了
9 bob.tell_info()
python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例的更多相关文章
- python第四十九课——对象序列化与反序列化
person.py class Person: def __init__(self,*args,**kwargs): print('我是Person类的构造...') # self.name=name ...
- python基础学习1-json,pickle的序列化和反序列化
import requests import json dic={'k1':'v1'} print(dic,type(dic)) result = json.dumps(dic)#调用dumps方法把 ...
- Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
- C#对象序列化与反序列化
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...
- [转载]C#对象序列化与反序列化
文章写的实在是太好了,忍不住转来: http://www.cnblogs.com/LiZhiW/p/3622365.html#_Toc8478 1.对象序列化的介绍 (1).NET支持对象序列化的几种 ...
- Java之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
随机推荐
- npm下载某个版本
如果我想要引入的是Jquery的1.7.2版本,则输入npm intall jquery@1.7.2,那么npm包管理器就会帮助你下载jquery1.7.2的版本到你当前操作目录下的node_modu ...
- Select2实现的带搜索的省市区三级联动代码 设置默认初始值
$(function() { $('#loc_province').select2('val','2456'); $('#loc_province').change(); $('#loc_city') ...
- Android Studio 小技巧(1):如何导入AAR文件
1. 导入AAR.JAR文件 File- > New -> New Module 这样子AAR文件就导入了,然后在app中的build.gradle中做如下添加 dependencies ...
- WHRER条件里的数据类型必须和字段数据类型一致
首先看案例: 表中字段FPHONE_IMEI是varchar类型的,主键也建立在FPHONE_IMEI 字段上,原则上只要where条件中用到了这个字段,就会走索引,这也是建立索引的目的,可事实是这样 ...
- ListView优化的时候ViewHolder的简洁写法
在ListVIew做复用优化的时候,经常会写ViewHolder,还需要很麻烦的去findview,我最讨厌写一堆的这样代码了,今天看到了一个极简的写法,很好用,很简洁啊!!! public stat ...
- 然之协同系统3.5(OA+CRM+CASH+TEAM)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mariadb-server 10.0.25 nginx 1.10.0 php7.0.4 collaboration commercial crm ...
- 【HHHOJ】ZJOI2019模拟赛(十四)03.12 解题报告
点此进入比赛 得分: \(50+5+24=79\) 排名: \(Rank\ 2\) \(Rating\):\(+79\) \(T1\):[HHHOJ197]古明地(点此看题面) 基本上全部时间都用来想 ...
- 问题 D: C++ 习题 输出日期时间--友元函数
题目描述 设计一个日期类和时间类,编写display函数用于显示日期和时间.要求:display函数作为类外的普通函数,分别在Time和Date类中将display声明为友元函数.在主函数中调用dis ...
- redis hash类型
- Yarn下Map数控制
public List<InputSplit> getSplits(JobContext job) throws IOException { long minSize = Math.max ...