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 ...
随机推荐
- CSS border-style 属性查询
border-style 属性用于设置元素所有边框的样式,或者单独地为各边设置边框样式.只有当这个值不是 none 时边框才可能出现. none solid dotted dashed double ...
- swfupload 上传报 security error # 2049 (security) 安全错误问题
老外给出类似理由: 大致是说这个是flash播放器自身组件安全策略问题, 禁止跨域上传的. I believe this is due to the Flash Player's "same ...
- 批量上传文件到HDFS的Shell脚本
在做Hadoop数据挖掘项目的时候,我们第一步是源数据的获取,即把相应的数据放置到HDFS中,以便Hadoop进行计算,手动将文件上传到HDFS中,未免太费时费力,所以我们可以采取像Flume一样的框 ...
- storm 入门原理介绍_AboutYUN
转自:http://www.aboutyun.com/thread-7394-1-1.html 了解Storm:http://www.aboutyun.com/thread-9547-1-2.html ...
- 第一个net-mvc程序
结构 视图层 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>&quo ...
- 机器学习之svm---cv wiki svm
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_s ...
- (转)java volatile关键字
转自:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 参考:http://blog.csdn.net/imzoer/ar ...
- spark(1.1) mllib 源码分析(三)-朴素贝叶斯
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...
- Delphi TreeView – 自动展开树形结构
Delphi TreeView – 自动展开树形结构 当处理完TreeView控件树形结构的数据后,需要默认自动全部展开,可以用到TreeView的Expanded属性. 1 2 3 4 5 6 7 ...
- JZOJ.5275【NOIP2017模拟8.14】水管
Description