Python(面向对象3 ——实例)
这个小东西包括了最近学习的,包括模块、包、序列化、继承、派生、组合的应用举例。整体架构如图:
bin是程序入口,core包括了几个主要逻辑,main是主架构,login包括登录功能,register包括注册功能,models包括使用到的几个类(老师、学生、课程),add包括对象的添加(老师、学生、课程),db下存保存路径和student、teacher、user信息。
对象也能够用pickle序列化保存到文件当中,但是在其他打开的时候,由于对象依凭类而存在,所以必须先加载类到内存中。
项目开发,会有bin目录、main目录等等,只要项目使用之前类先加载到了内存中就行,无所谓写在哪个目录
但是如果在两个文件中,如果两个文件同时运行,但是相互没有关系,因为内存隔离,也无法取到类的信息。
可以通过import导入需要的类,但是不能直接 import[模块] ,因为使用的类是 [类],而 import[模块] 之后,调用的某个类,实际上是用 [模块].[类] 来调用的,
所以导入类的时候最好用 from [模块] import [类] 或者在写程序的时候就写成: [模块].[类] 的形式
--------------------------------------------------------bin模块——入口模块------------------------------------------------------ # -*-coding:UTF-8-*- import sys,os #设置环境变量
BASIC_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASIC_DIR) from core import main '''
因为调用main的时候就会执行main,所以不用再另行执行
每个包的__init__.py 就是包本身名字的 py 文件,包里其他的 py 文件最好不要命名包名字了
'''
-------------------------------------------------------main模块,框架结构------------------------------------------------------
# -*-coding:UTF-8-*-
from core import login,register
from core import add tag=True
while tag:
ch=input('1)注册用户 2)用户登录\n=选择=>>:')
if ch=='':
register.register() #注册模块
tag=False
elif ch=='':
login.login() #登录
tag=False tag=True
while tag:
ch=input('1)添加学生 2)添加老师 3)显示学生信息 4)显示老师信息\n=选择(q退出)=>>:')
if ch=='':
add.student() #添加学生对象
elif ch=='':
add.teacher() #添加老师对象
elif ch=='':
add.student_info.all_info() #查看所有学生的信息
elif ch=='':
add.teacher_info.all_info() #查看所有老师的信息
elif ch=='q':
tag=False
-------------------------------------------------------register模块,注册登录用户------------------------------------------------------
# -*-coding:UTF-8-*- from db import path_s
import pickle def register():
while True:
user=input('>>用户名:').strip()
pwd=input('>>密码:').strip()
phone=input('>>电话:').strip()
u_id=input('>>身份证:').strip()
if not user or not pwd or not phone or not phone.isdigit():
print('输入有误!用户名,密码,电话必填')
continue
with open(path_s.User_dic_path,'ab') as f :
user_add={user:pwd,'phone':phone,'ID':u_id}
res=pickle._dumps(user_add)
f.writelines([res])
break
-------------------------------------------------------login模块,用户登录------------------------------------------------------
# -*-coding:UTF-8-*- from db import path_s
import pickle def login():
tag=True
while tag:
user=input('>>用户名:').strip()
pwd=input('>>密码:').strip()
l=[]
with open(path_s.User_dic_path,'rb') as f:
while True:
try: #用户注册是pickle多次序列化写入文件的,反序列化需要多次输出,这里用死循环,直到报错再退出
l.append(pickle.load(f))
except EOFError:
break
# print(l)
for i in l:
if user in i and i[user]==pwd:
print('login sucessful')
tag=False
-------------------------------------------------------models模块,定义 老师、学生、课程类------------------------------------------------------
# -*-coding:UTF-8-*- class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def Talk(self):
print('%s is talking')
class Oldboy_company(People):
def __init__(self,name,age,sex,p_id):
People.__init__(self,name,age,sex)
self.id=p_id
self.courses=[] class Teacher(Oldboy_company):
def __init__(self,name,age,sex,p_id,salary,level):
Oldboy_company.__init__(self,name,age,sex,p_id)
self.salary=salary
self.level=level
self.level=level
def teach(self):
print('%s is teaching' %self.name)
def info(self):
print('''
-------%s information------
name:%s
age:%s
sex:%s
ID:%s
salary:%s
level:%s
''' %(self.name,self.name,self.age,self.sex,self.id,self.salary,self.level))
class Student(Oldboy_company):
def __init__(self,name,age,sex,p_id,group):
Oldboy_company.__init__(self,name,age,sex,p_id)
self.group=group
self.discount=1
def study(self):
print('%s is studying' %self.name)
def info(self):
print('''
-------%s information------
name:%s
age:%s
sex:%s
ID:%s
group:%s
''' %(self.name,self.name,self.age,self.sex,self.id,self.group))
def course_info(self):
for i in self.courses:
print('''
----%s course information----
name:%s
price:%s
period:%s
''' %(self.name,i.name,i.price*self.discount,i.period)) class Courses_format:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
def course_info(self):
print('''
----%s information----
name:%s
price:%s
period:%s
''' %(self.name,self.name,self.price,self.period))
-------------------------------------------------------add模块,添加 老师、学生------------------------------------------------------
# -*-coding:UTF-8-*- from core.models import Teacher,Student,Courses_format #导入的是具体的类,而不是模块
from db import path_s
import pickle def basic_input():
name = input('name: ').strip()
age = input('age: ').strip()
sex = input('sex: ').strip()
name_id = input('ID: ').strip()
return name,age,sex,name_id def student():
while True:
name,age,sex,name_id=basic_input()
group = input('group: ').strip()
if not name:
print('姓名必填')
continue
break
res=Student(name,age,sex,name_id,group)
with open(path_s.Student_path,'ab')as f:
pickle._dump(res,f) def teacher():
while True:
name,age,sex,name_id=basic_input()
salary = input('salary: ').strip()
level = input('level: ').strip()
if not name:
print('姓名必填')
continue
break
res=Teacher(name,age,sex,name_id,salary,level)
with open(path_s.Teacher_path,'ab')as f:
pickle._dump(res,f) class Tell_info:
def __init__(self,path):
self.path=path
def all_info(self):
with open(self.path,'rb')as f:
while True:
try:
res=pickle._load(f)
res.info()
except EOFError:
break student_info=Tell_info(path_s.Student_path)
teacher_info=Tell_info(path_s.Teacher_path)
Python(面向对象3 ——实例)的更多相关文章
- python面向对象编程实例解析
1. 类和函数 面向对象编程的例子: #!/usr/bin/env python # -*- coding: utf-8 -*- class Person(object): #在属性和变量的前面增加“ ...
- python面向对象编程实例
1.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生 class Student: """学生类""" c ...
- Python面向对象:类、实例与访问限制
首先记录下面向对象的名词: 对象:python万物皆对象,程序设计的东西在对象上体现. 类:具有相同属性和行为的对象的集合. 消息:各个对象之间通过消息相互联系. 方法:对象功能实现的过程. 封装:把 ...
- Python面向对象之类和实例
1.类的定义 定义是用过class关键字 class Student(object): pass class 后面紧接着是类名,即Student,类名通常是大写开头的单词, 紧接着是(object), ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- P3P解决cookie跨域
P3P是什么 P3P(Platform for Privacy Preferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护. P3P标准的构想是:Web 站点的隐私策略应该告 ...
- uboot中断功能实现
uboot中实现irq中断(uboot version2015.04)1.实验目的:实现GPIO_2的外部中断 2.实验步骤:a.GPIO_2(GPIO1_IO02)为中断源, 首先需要设置这个pad ...
- AVCapture编程理解
AVCapture用于媒体采集,在媒体采集的流程中,会存在如下几个对象: AVCaptureDevice.这里代表抽象的硬件设备. AVCaptureInput.这里代表输入设备(可以是它的子类),它 ...
- python read文件内容的iter方式
遍历file的方式 iter(lambda: f.read(4096), "")等价与while True: data = f.read(4096) if not data: br ...
- ffmpeg 日志系统av_log()
一般使用Error, Warning, Debug3个级别即可(见下面的颜色).AV_LOG_QUIET 核心函数只有一个:av_log().使用av_log()在控制台输出日志的效果如下图所示. a ...
- 安装第三方模块时遇到Python version 2.7 required, which was not found
## script to register Python 2.0 or later for use with win32all# and other extensions that require P ...
- php 区分中文,英文,中英混合
$str1="是你"; $strA = trim($str1); $lenA = strlen($strA); $lenB = mb_strlen($strA,"utf- ...
- 说明Oracle数据库逻辑备份和物理备份的方式。
说明Oracle数据库逻辑备份和物理备份的方式. 解答:Oracle备份包括逻辑备份和物理备份. 1).逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件. a.输出(Export)输 ...
- iOS开发-你真的会用SDWebImage?
SDWebImage作为眼下最受欢迎的图片下载第三方框架,使用率非常高.可是你真的会用吗?本文接下来将通过例子分析怎样合理使用SDWebImage. 使用场景:自己定义的UITableViewCell ...
- OpenWrt 安装usb支持
(一)下载软件 1)komd-usb-ohci kmod-usb2 kmod-usb-storage kmod-usb-core 这些是USB驱动包 2) kmod-nls-base kmod-nls ...