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 ...
随机推荐
- glob/globfree--找出匹配模式的路径名
语法 #include <glob.h> int glob(const char *pattern, int flags, int (*errfunc) (const char *epat ...
- 【转】Python 第三方 http 库-Requests 学习
原文地址:http://www.itwhy.org/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/python/python-%E7%AC%AC%E4%B8%89%E6%9 ...
- C++ STL标准模板库(stack)
//stack的使用 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stack> using name ...
- .NET学习笔记(1)
把 DataSet 绑定到 Repeater 控件 Repeater 控件用于显示重复的项目列表,这些项目被限制在该控件.Repeater 控件可被绑定到数据库表.XML 文件或者其他项目列表. 获取 ...
- Educational Codeforces Round 22 E. Army Creation 主席树 或 分块
http://codeforces.com/contest/813/problem/E 题目大意: 给出长度为n的数组和k, 大小是1e5级别. 要求在线询问区间[l, r]权值, 权值定义为对于 ...
- 【Raspberry Pi】crontab 定时任务
在linux上做定时任务一般用crond 两种方法上文已列,但昨天写的crond命令却一直都没有运行,上网查,有说是环境变量的,也有说是时间问题的,都改过,但还没有效. 今天再次认真读了一遍cront ...
- The Boost C++ Libraries中文教程
http://zh.highscore.de/cpp/boost/
- iOS-tableView会卡顿
其实影响tableView卡顿的因素有很多,我也就其中一些常见的问题来说一下. 在tableView里的tableViewCell中使用许多图片的时候,而且我们大量使用的是 xxx.clipsToBo ...
- 笔试面试的路上——努力ing
积累: 最值得阅读学习的 10 个 C 语言开源项目代码 改变计算技术的 9 个伟大算法 程序员选修课丨追妹子的各种算法 追 MM 和设计模式:趣解 23 种设计模式 设计高可用性.容错和数据隔离的H ...
- iOS xcode6.0使用7.1运行程序 iphone5上下有黑条
转自:http://stackoverflow.com/questions/25817562/black-bars-appear-in-app-when-targeting-ios7-1-or-7-0 ...