Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例
class Date: #定义时间类,包含姓名、年、月、日,用于返回生日
def __init__(self,name,year,mon,day):
self.name = name
self.year=year
self.mon=mon
self.day=day
def tell_birth(self):
print('%s:%s-%s-%s'%(self.name,self.year,self.mon,self.day)) class Course: #定义课程类,包含姓名,课程名、价格,用于返回学生报的课程信息或老师的教学信息
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
def tell_course(self):
print('''
--------%s course info------------
course name:%s
course price:%s
course period:%s
'''%(self.name,self.name,self.price,self.period))
class People: #定义父类People,减少学生类和老师类的代码量
def __init__(self,name,age,sex,year,mon,day):
self.name=name
self.age=age
self.sex=sex
self.courses=[] #用于存放课程名称,如果没有这个默认值,下边course_info可以用if判断
self.birth=Date(name,year,mon,day)
def walk(self):
print('%s is walking' %self.name)
def course_info(self): #
# if 'courses' in self.__dict__: 可以是判断对象是否包含课程信息,加个默认值就肯定有courses
for obj in self.courses: #循环查看课程信息,即课程对象的tell_course属性
obj.tell_course()
class Teacher(People):
def __init__(self,name,age,sex,salary,level,year,mon,day):
People.__init__(self,name,age,sex,year,mon,day) #因为父类的初始化需要这些参数,如果不初始化会报错
self.salary=salary
self.level=level
def teach(self):
print('%s is teaching' %self.name)
def tell_info(self):
print('''
--------------%s info--------------
NAME:%s
AGE:%s
SEX:%s
SAL:%s
LEVEL:%s
'''%(self.name,self.name,self.age,self.sex,self.salary,self.level)) class Student(People):
def __init__(self,name,age,sex,group,year,mon,day):
People.__init__(self,name, age, sex,year,mon,day)
self.group=group
def tell_info(self):
print('''
--------------%s info--------------
NAME:%s
AGE:%s
SEX:%s
GROUP:%s
'''%(self.name,self.name,self.age,self.sex,self.group))
测试验证:
bob=Teacher('bob',84,'female',300000,-1,1994,5,27)
print(bob.__dict__)
3 #输出
{'name': 'bob', 'age': 84, 'sex': 'female', 'courses': [], 'birth': <__main__.Date object at 0x000001E117677278>, 'salary': 300000, 'level': -1}
bob.birth.tell_birth()
7 #输出
bob:1994-5-27
python=Course('Python',15800,'5month') #定义课程对象
linux=Course('Linux',12800,'4month')
bob.courses.append(python) #将课程对象加到bob的课程列表中
bob.courses.append(linux)
bob.course_info() #调用bob的course_info属性,循环输出课程对象的tell_course属性,如果课程列表中没有课程对象,那么就没有输出
15 #输出
--------Python course info------------
course name:Python
course price:15800
course period:5month
--------Linux course info------------
course name:Linux
course price:12800
course period:4month
# bob.courses[0].tell_course(),这是用很low的方法查看课程信息
对象的序列化和反序列化
py对象的序列化是基于pickle模块完成的,pickle模块支持所有的py数据的序列化,json模块只能够支持各种编程语言通用的数据类型
对象基于文件反序列化,需要生成该对象的类存在于内存中,并且没有被隔离
序列化示例:
创建类文件
#创建student_class.py文件,定义一个类
class Student:
def __init__(self, name, age, sex, group):
self.name=name
self.age=age
self.sex=sex
self.group=group
def study(self):
print('%s is study' % self.name)
def tell_info(self):
print('''
----------%s info---------
NAME:%s
AGE:%s
SEX:%s
group:%s
''' %(self.name,self.name,self.age,self.sex,self.group))
创建序列化执行文件:二进制写入的文件student.pkl需要用二进制方式才能打开
#创建serialize.py文件
import pickle #导入pickle模块
import student_class #导入上面的类模块
with open('student.pkl','wb') as file:
student1=student_class.Student('bob',15,'male','T3') #创建对象
pickle.dump(student1,file) #序列化对象写入文件student.pkl
创建反序列化文件:
#创建反序列化执行文件deserialize.py
import pickle
import student_class
with open('student.pkl','rb') as file:
print(file.read())
#测试输出结果:
# 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.'
bob=pickle.load(file) #用load反序列化不能fild.read(),否则会提示EOFError:Ran out of input,因为file.read()已经将文件读完了
bob.tell_info()
选课系统综合示例:待补充
pass
Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例的更多相关文章
- [Java开发之路](9)对象序列化与反序列化
1. 对象序列化 当你创建对象时.仅仅要你须要.它会一直存在,可是程序终止时,不管何时它都不会继续存在.虽然这样做是很有意义的,可是在某些情况下.假设程序不执行时扔能存在而且保存其信息,那将对我们很实 ...
- Python开发基础-Day18继承派生、组合、接口和抽象类
类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承obj ...
- Python开发基础-Day20继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- python第四十九课——对象序列化与反序列化
person.py class Person: def __init__(self,*args,**kwargs): print('我是Person类的构造...') # self.name=name ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 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之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
随机推荐
- 2016-2017 2 20155335《java程序设计》第四周总结
# 20155335 <Java程序设计>第四周学习总结 ## 教材学习内容总结 继承,在本职上是特殊到一般的关系,即is—a关系,子类继承父类,表明子类是一种特殊的父类,并且具 ...
- 炒鸡简单的canvas粒子(山东数漫江湖)
位图的canvas一直不会被svg比下去的原因了. 俗话说,须弥芥子,是大小之说,也有以小见大之说,颗颗粒子,足以构建宏大效果. 这是一篇炒鸡简单的canvas粒子教程,主要是讲如何粒子特效的原理,一 ...
- SSM三大框架整合详细总结(Spring+SpringMVC+MyBatis)(山东数漫江湖)
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经很久了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录 ...
- 【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
题目链接 题意:求\(\sum_{i=1}^{n}\gcd(i,n)\) 首先可以肯定,\(\gcd(i,n)|n\). 所以设\(t(x)\)表示\(gcd(i,n)=x\)的\(i\)的个数. 那 ...
- python 实现二叉树相关算法
一.构建与遍历二叉树 基本性质 1)在二叉树的第i层上最多有2i-1 个节点 .(i>=1)2)二叉树中如果深度为k,那么最多有2k-1个节点.(k>=1)3)在完全二叉树中,具有n个节点 ...
- vim 实现括号以及引号的自动补全
编辑文件/etc/vim/vimrc sudo vim /etc/vim/vimrc 在最后添加 inoremap ( ()<ESC>i inoremap [ []<ESC>i ...
- socket 编程 TCP 实现简单聊天功能【转】
转自:http://blog.csdn.net/liujia2100/article/details/9006479 版权声明:本文为博主原创文章,未经博主允许不得转载. 各个主要函数的功能: .so ...
- python基础===基于requests模块上的协程【trip】
今天看博客get了一个有趣的模块,叫做 trip #(pip install trip) 兼容2.7版本 基于两大依赖包:TRIP: Tornado & Requests In Pa ...
- [New learn] NSOperation基本使用
1.简介 NS(基于OC语言)是对GCD(基于C语言)的封装,让开发者能够更加友好的方便的去使用多线程技术. 2.NSOperation的基本使用 NSOperation是抽象类,所以如果要使用NSO ...
- laravel 中的入口文件报错
1.此次是由于加载的配置文件的编码错误导致的.例:conf.php