组合应用:

class Teacher:
def __init__(self,name,age,sex,salary,level):
self.name=name
self.age=age
self.sex=sex
self.salary=salary
self.level=level def walk(self):
print('%s is walking'%self.name) 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 Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day def tell_birth(self):
print('%s-%s-%s'%(self.year,self.mon,self.day))
alex=Teacher('alex',84,'male',30000,-1)
Birth=Date(1900,13,43)
alex.birth=Birth alex.tell_info()
print(alex.birth) #<__main__.Date object at 0x00000000027B2860>
alex.birth.tell_birth()
运行结果:         ----------alex info--------
        NAME:alex
        AGE:84
        SEX:male
        SAL:30000
        LEVEL:-1
        
<__main__.Date object at 0x00000000027B2860>
1900-13-43

改动Date类,表明是谁的生日:

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)) alex=Teacher('alex',,'male',,-)
Birth=Date(alex.name,1900,13,43)
alex.birth=Birth alex.birth.tell_birth()
运行结果:
alex:--

组合的应用:

class Teacher:
def __init__(self,name,age,sex,salary,level):
self.name=name
self.age=age
self.sex=sex
self.salary=salary
self.level=level def walk(self):
print('%s is walking'%self.name) 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:
def __init__(self,name,age,sex,group):
self.name=name
self.age=age
self.sex=sex
self.group=group def walk(self):
print('%s is walking'%self.name) def study(self):
print('%s is studying'%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)) class Course:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period def tell_course(self):
print('''
------%s info------
course name:%s
course price:%s
course period:%s
'''%(self.name,self.name,self.price,self.period)) alex=Teacher('alex',,'male',,-)
xiaohuang=Student('xiaohuang',,'male','group8')
python=Course('Python',,'6 mons')
linux=Course('Linux',,'3 mons')
go=Course('Go',,'4 mons') alex.courses=[]
alex.courses.append(python)
alex.courses.append(go)
print(alex.courses) #[<__main__.Course object at 0x0000000001EAA128>, <__main__.Course object at 0x0000000001E98CC0>] xiaohuang.courses=[]
xiaohuang.courses.append(python)
print(xiaohuang.courses) #[<__main__.Course object at 0x0000000001EAA128>]
运行结果:
[<__main__.Course object at 0x0000000001EAA128>, <__main__.Course object at 0x0000000001E98CC0>]
[<__main__.Course object at 0x0000000001EAA128>]

进一步优化,可以查看对象的课程:

class Teacher:
def __init__(self,name,age,sex,salary,level):
self.name=name
self.age=age
self.sex=sex
self.salary=salary
self.level=level
self.courses = [] def walk(self):
print('%s is walking'%self.name) 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)) def tell_course(self): #self=egon
if 'courses' in self.__dict__: #'courses' in egon.__dict__
for obj in self.courses:
obj.tell_course() class Course:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period def tell_course(self):
print('''
------%s info------
course name:%s
course price:%s
course period:%s
'''%(self.name,self.name,self.price,self.period)) egon=Teacher('egon',,'male',,)
python=Course('Python',,'6 mons')
linux=Course('Linux',,'3 mons')
go=Course('Go',,'4 mons') egon.courses.append(python)
egon.courses.append(go)
egon.tell_course()

我们需要注意一点:

序列化:

import pickle
xiaohuang=Student('xiaohuang',,'male','group8')
python=Course('Python',,'6 mons')
linux=Course('Linux',,'3 mons')
go=Course('Go',,'4 mons') xiaohuang.courses.append(python)
xiaohuang.courses.append(go)
res=pickle.dumps(xiaohuang)
print(res) with open('studentdb.pkl','wb') as f:
f.write(res) 运行结果:
b'\x80\x03c__main__\nStudent\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\t\x00\x00\x00xiaohuangq\x04X\x03\x00\x00\x00ageq\x05KIX\x03\x00\x00\x00sexq\x06X\x04\x00\x00\x00maleq\x07X\x05\x00\x00\x00groupq\x08X\x06\x00\x00\x00group8q\tX\x07\x00\x00\x00coursesq\n]q\x0b(c__main__\nCourse\nq\x0c)\x81q\r}q\x0e(h\x03X\x06\x00\x00\x00Pythonq\x0fX\x05\x00\x00\x00priceq\x10M\xb8=X\x06\x00\x00\x00periodq\x11X\x06\x00\x00\x006 monsq\x12ubh\x0c)\x81q\x13}q\x14(h\x03X\x02\x00\x00\x00Goq\x15h\x10MH&h\x11X\x06\x00\x00\x004 monsq\x16ubeub.'

注意:json不能序列化对象,我们应该用pickle

反序列化:

with open('studentdb.pkl','rb') as f:
res=f.read()
obj=pickle.loads(res)
print(obj)
obj.tell_info()
运行结果:
------Python info------
course name:Python
course price:
course period: mons ------Go info------
course name:Go
course price:
course period: mons

反序列化一定要基于类在内存里面

实现与用户交互:

class Student:
def __init__(self,name,age,sex,group):
self.name=name
self.age=age
self.sex=sex
self.group=group
self.courses = [] def study(self):
print('%s is studying'%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)) def tell_course(self):
if 'courses' in self.__dict__:
for obj in self.courses:
obj.tell_course() name=input('user: ').strip()
age=int(input('age: ').strip())
sex=input('sex: ').strip()
group=input('group: ').strip() xiaohuang=Student(name,age,sex,group)
xiaohuang.tell_info()
运行结果:
user: xiaohuang
age:
sex: male
group: group8 -------xiaohuang info-------
NAME:xiaohuang
AGE:
SEX:male
GROUP:group8

简洁的写法:

class Student:
def __init__(self,name,age,sex,group):
self.name=name
self.age=age
self.sex=sex
self.group=group
self.courses = [] def study(self):
print('%s is studying'%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)) def tell_course(self):
if 'courses' in self.__dict__:
for obj in self.courses:
obj.tell_course() class Course:
def __init__(self, name, price, period):
self.name = name
self.price = price
self.period = period def tell_course(self):
print('''
------%s info------
course name:%s
course price:%s
course period:%s
''' % (self.name, self.name, self.price, self.period))

import pickle
xiaohuang=Student('xiaohuang',18,'male','group8')
with open('studentdb.pkl','wb') as f:
pickle.dump(xiaohuang,f) with open('studentdb.pkl','rb') as f:
obj=
pickle.load(f)
obj.tell_info()

运行结果:
-------xiaohuang info-------
NAME:xiaohuang
AGE:
SEX:male
GROUP:group8

模块的运用:

先定义一下几个文件:

各文件内容如下:

models.py:

class Student:
def __init__(self,name,age,sex,group):
self.name=name
self.age=age
self.sex=sex
self.group=group
self.courses = [] def study(self):
print('%s is studying'%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))

pickle_obj.py:

import pickle

def get_obj():
with open('studentdb.pkl', 'rb') as f:
res=f.read()
obj=pickle.loads(res)
obj.tell_info() with open('studentdb.pkl', 'rb') as f:
obj = pickle.load(f)
obj.tell_info()

start.py:

from models import Student

import pickle_obj

pickle_obj.get_obj()

还有我们事先准备好的studentdb.pkl文件。

运行start.py文件,效果如下:

        -------xiaohuang info-------
NAME:xiaohuang
AGE:
SEX:male
GROUP:group8

接下来看开发软件的规范:

bin文件夹一般放可执行文件,conf文件夹一般放可配置文件,db文件夹一般方法数据文件,还有log目录,lib目录(一般存放常用小工具),src目录放核心,类,逻辑等

开发选课系统:

main函数提供菜单,用户可以选择
今天作业:老师,学生,课程三个类实现选课系统

最新文章

  1. MRPT图形界面
  2. 深入了解Java程序执行顺序
  3. 用node.js实现简单的web服务器
  4. Giving Data Backup Option in Oracle Forms 6i
  5. HBase Scan Timeout-OutOfOrderScannerNextException
  6. Oracle Flashback Technologies - 闪回数据库
  7. mysql 中文乱码的解决办法
  8. VS-FluentData 单元测试
  9. Appium的前世今生
  10. html combobox select控件设置默认选项
  11. 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合
  12. 【翻译】我钟爱的Visual Studio前端开发工具/扩展
  13. C# - is
  14. C#泛型回顾点滴
  15. 九、VueJs 填坑日记之在项目中使用jQuery
  16. remove duplicate of the sorted array
  17. 静态代码扫描工具PMD定制xml的规则(一)操作篇
  18. 设计模式系列19:策略模式(Stragety Pattern)
  19. python语言的基本要素
  20. python之计算机硬件基本认知_数据单位_进制间转换_数的原码反码补码

热门文章

  1. Java Web学习总结(6)Cookie/Session
  2. Git 中的一些其他常用命令
  3. mysql8 主从配置方案
  4. textarea 根据光标位置添加内容
  5. python编写计算器
  6. sql查询语句得到返回值fetchone()
  7. 专家揭秘:STM32启动过程全解
  8. AST7D08 心率计
  9. java并发编程笔记(十)——HashMap与ConcurrentHashMap
  10. ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ‘com.win.mall.dao.CartMapper.test’. It’s likely that neither a Result Type nor a Result Map was specified.