继承+组合应用示例

 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基础之继承组合应用、对象序列化和反序列化,选课系统综合示例的更多相关文章

  1. python第四十九课——对象序列化与反序列化

    person.py class Person: def __init__(self,*args,**kwargs): print('我是Person类的构造...') # self.name=name ...

  2. python基础学习1-json,pickle的序列化和反序列化

    import requests import json dic={'k1':'v1'} print(dic,type(dic)) result = json.dumps(dic)#调用dumps方法把 ...

  3. Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...

  4. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  5. python基础——类名称空间与对象(实例)名称空间

    python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...

  6. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

  7. C#对象序列化与反序列化

    C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...

  8. [转载]C#对象序列化与反序列化

    文章写的实在是太好了,忍不住转来: http://www.cnblogs.com/LiZhiW/p/3622365.html#_Toc8478 1.对象序列化的介绍 (1).NET支持对象序列化的几种 ...

  9. Java之对象序列化和反序列化

    一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...

随机推荐

  1. Visual Studio无法推送提交到Github的解决方法

    前言 当出现Visual Studio推送变更失败时,卸载系统中所有Git以及Visual Studio 的Git工具再重装即可 前情概要 今天由于要尝试使用RabbitMQ,所以打算先在本地做些小D ...

  2. mysql的三种索引

    MySQL中的索引分为3种: 1,主键索引:即用主键当唯一索引 2,常规索引:实现方式为B树和哈希表 3,全文索引:实现原理类似倒排索引,常用来查询字段中包含关键字 下面复习下B-TREE和hash- ...

  3. [RDLC]心得整理(一)

    2014年在做项目的时候, 过用过RDLC, 之后便在没有使用过了. 最近又有项目使用rdlc, 感觉有些陌生,然后重新阅读了以前的笔记,想做一下整理. 常见问题: 1. 为什么rdlc报表出来的pd ...

  4. Spark核心组件

    Spark核心组件 1.RDD resilient distributed dataset, 弹性分布式数据集.逻辑上的组件,是spark的基本抽象,代表不可变,分区化的元素集合,可以进行并行操作.该 ...

  5. rosservice call ERROR:Unable to load type ... Have you typed 'make'

    you need to source in the new terminal $ source ~/catkin_ws/devel/setup.bash

  6. Javascript打印金字塔,倒立金字塔,空心金字塔,菱形,空心菱形等

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. ffmpeg控制台上不能输出信息的解决办法

    最近遇到下面类似的问题 我下载了最新版本(1.1.2)版本的ffmpeg,在windows平台下使用msys+mingw编译成功后,我输入命令后,一点输出信息都没有,例如: ffmpeg -v 这时候 ...

  8. jrtplib源码分析 第一篇 jthread的编译与分析

    第一篇 jthread的编译与分析 jrtplib代码依赖库jthread,因此先从jthread开始jrtplib的学习.首先从以下链接下载jthread的源代码http://research.ed ...

  9. javascript 时间格式化方法

    对jquery进行扩展的方法: //对时间格式化(jquery方法扩展) Date.prototype.Format = function (fmt) { //author: meizz var o ...

  10. openwrt定制管理

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianguozheng/article/details/24673097 近期这个比較火,可是改了东 ...