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之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
随机推荐
- staticmethod classmethod property方法
@staticmethod 静态方法 函数修饰符,用来修饰一个函数,类似于装饰器 class Dog(object): def __init__(self,name): self.name = nam ...
- Ubuntu、Windows 、Linux集合
一.Ubuntu/Windows双系统修复引导 首先说明:在Windows存在的前提下安装Ubuntu(或者Ubuntu系列)是不需要修复引导的.因为grub会自动搜索存在硬盘中的系统. 而在 ...
- 【Troubleshooting 】Outlook 客户端无法显示电子邮件图像
出于安全原因,Outlook 2013/2016不会在电子邮件中显示图像,但您可以右键单击图像并选择" 下载图片 "选项.我最近注意Outlook停止显示图像,并且没有下载图像的选 ...
- nginx的常用命令
一.nginx的解压安装 #tar xzvf nginx-1.6.0.tar.gz #cd nginx-1.6.0 #./configure --prefix=/home/weixin/loca ...
- CentOS6下DHCP服务(二)简单配置案例及故障排查
1.预分配网络参数如下:linux服务器:eth0 IP为192.168.8.250 做为局域网DHCP服务器局域网网段设置为192.168.8.0/24:内部计算机的router为192.168. ...
- 使用SSH密钥方式登录ubuntu Linux,指令(ssh-keygen 和 ssh-copy-id)
实验目的 从myVM1(本地主机)上登录myVM2(远程主机).采用密钥方式,不输入密码. 测试环境 主机:window7 sp1 64位 专业版 虚拟机:VMware workstation 12 ...
- May 05th 2017 Week 18th Friday
No matter what have happened today, the sun will just rise in the morning of tomorrow. 无论今天发生了什么,明天早 ...
- 深入了解MongoDB
一.介绍: 数据库分为关系型数据库和非关系型数据库 关系型数据库是建立在关系模型上的数据库,主要的有Oracle MySQL Microsoft SQL Server NoSQL是非关系型数据存储的广 ...
- POJ-2376 Cleaning Shifts---区间覆盖&贪心
题目链接: https://vjudge.net/problem/POJ-2376 题目大意: farmer John要安排他的牛清理牛棚,一共有T个牛棚要清理,每头牛可以清理相邻的牛棚.比如,一头牛 ...
- react里面怎么引入样式
模块样式 在刚开始构建好框架的时候,准备开始写业务,在第一个页面的时候就会碰到怎么引入样式的问题,踩过一些坑,不是使用style,头部也不需要另外取名,直接引入css就可以,引入方式是这样 <d ...