博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python--面向对象的程序设计之组合应用、开发软件规范
阅读量:4358 次
发布时间:2019-06-07

本文共 9181 字,大约阅读时间需要 30 分钟。

组合应用:

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

组合的应用:

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',84,'male',30000,-1)xiaohuang=Student('xiaohuang',73,'male','group8')python=Course('Python',15800,'6 mons')linux=Course('Linux',12800,'3 mons')go=Course('Go',9800,'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',18,'male',30000,10)python=Course('Python',15800,'6 mons')linux=Course('Linux',12800,'3 mons')go=Course('Go',9800,'4 mons')egon.courses.append(python)egon.courses.append(go)egon.tell_course()

我们需要注意一点:

序列化:

import picklexiaohuang=Student('xiaohuang',73,'male','group8')python=Course('Python',15800,'6 mons')linux=Course('Linux',12800,'3 mons')go=Course('Go',9800,'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:15800        course period:6 mons                ------Go info------        course name:Go        course price:9800        course period:4 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: xiaohuangage: 73sex: malegroup: group8        -------xiaohuang info-------        NAME:xiaohuang        AGE:73        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 picklexiaohuang=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:18        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 pickledef 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 Studentimport pickle_objpickle_obj.get_obj()

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

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

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

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

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

开发选课系统:

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

 

转载于:https://www.cnblogs.com/metianzing/p/7119208.html

你可能感兴趣的文章
c语言中的头文件string.h的作用,C语言常用头文件及库函数——string.h
查看>>
c语言字符-1代表什么,玩儿转C语言:符号和字符(1)
查看>>
知道商洛学院c语言章节答案,C语言程序设计(商洛学院)知到章节答案
查看>>
c语言酒精检测仪程序代码,单片机酒精浓度测试仪,代码,原理图
查看>>
单路电压表c语言编程,单片机数字电压表的设计
查看>>
精通c语言的标准,《精通Unix下C语言编程与项目实践》之七——标准I/O重定向
查看>>
蓝桥杯c语言试题 高职,2011l蓝桥杯c语言高职真题附加答案2.doc
查看>>
c 语言 设计算法 例题,C语言程序设计例题.pdf
查看>>
p4 linux 命令行,《linux就该这么学》学习笔记25期2020-P4
查看>>
android9.0官方下载,安卓9.0系统刷机包 官方正式版
查看>>
android 模块封装,Android开发之针对联系人的封装
查看>>
android 构建期间错误,Android构建错误
查看>>
Android应用开发病虫害识别,基于Android平台的枣虫害识别系统的设计与实现
查看>>
织梦上传html文件,提高DedeCMS生成静态页html文件速度的方法
查看>>
html焦点自动轮播幻灯片js,js实现幻灯片轮播图
查看>>
在Logstash的配置文件中对日志事件进行区分
查看>>
安装pip
查看>>
增量+全量备份SVN服务器
查看>>
两台服务器打通了秘钥,依然无法免密登录的问题
查看>>
查看进程的准确启动时间
查看>>