Python--面向对象的程序设计之组合应用、开发软件规范
组合应用:
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目录放核心,类,逻辑等
开发选课系统:
Python--面向对象的程序设计之组合应用、开发软件规范的更多相关文章
- python 面向对象的程序设计
一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...
- python面向对象--包装标准类型及组合方式授权
# 实现授权是包装的一个特性.包装一个类型通常是对已存在的类型进行一些自定义定制, # 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变. # 授权的过程,其实也就是所有的更新功能都 ...
- python学习------面向对象的程序设计
一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...
- Python之路【第八篇】:面向对象的程序设计
阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...
- python面向对象编程设计与开发
一.什么是面向对象的程序设计 1.何为数据结构? 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,如列表.字典. 2.何为编程? 编程是指程序员用特定的语法+数据结构+算法,组成的代码,告 ...
- Python学习之路9☞面向对象的程序设计
一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...
- [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境
[.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...
- Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)
Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- controllerpom
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- Servlet 第一天
package com.servlet; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet. ...
- yii2.0增删改查实例讲解
yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...
- HDU 6069 Counting Divisors —— 2017 Multi-University Training 4
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- 汇编 “ program has no starting address ”解决方法
- LR之分析
1.Errors(错误统计) 每秒错误数:数值越小越好,通过这个图可以知道,当负载增加的时候,定位何时系统在负载下开始不稳定甚至出错. 2.Transaction(事务) average transa ...
- Extjs的一些基础使用!
一.获取元素(Getting Elements) 1. Ext.get() var el = Ext.getCmp('id');//获取元素,等同于document.getElementById('i ...
- (转)Docker network命令
转:https://blog.csdn.net/gezhonglei2007/article/details/51627821 原文地址:https://docs.docker.com/engine/ ...
- jenkins插件set build description使用规则
配置前要注意的点: 先安装插件:set build description 安装该插件后,在[Post-build Actions]栏目中会多出description setter功能,可以实现构建完 ...
- Gradle Wrapper 介绍
回顾 上一篇介绍了如何使用 Gradle 快速创建 Java 项目,开始讲 Gradle Wrapper 之前先来重温一下通过 gradle init 命令创建的 Java 项目目录结构 ├── bu ...