这个小东西包括了最近学习的,包括模块、包、序列化、继承、派生、组合的应用举例。整体架构如图:

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 ——实例)的更多相关文章

  1. python面向对象编程实例解析

    1. 类和函数 面向对象编程的例子: #!/usr/bin/env python # -*- coding: utf-8 -*- class Person(object): #在属性和变量的前面增加“ ...

  2. python面向对象编程实例

    1.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生 class Student: """学生类""" c ...

  3. Python面向对象:类、实例与访问限制

    首先记录下面向对象的名词: 对象:python万物皆对象,程序设计的东西在对象上体现. 类:具有相同属性和行为的对象的集合. 消息:各个对象之间通过消息相互联系. 方法:对象功能实现的过程. 封装:把 ...

  4. Python面向对象之类和实例

    1.类的定义 定义是用过class关键字 class Student(object): pass class 后面紧接着是类名,即Student,类名通常是大写开头的单词, 紧接着是(object), ...

  5. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  6. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  7. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  8. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  9. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  10. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

随机推荐

  1. Jquery Deferred 详解

    近期由于公司项目主要由我来负责前端,所以打算优化一下代码.在jquery 里面有个Deferred的对象.为了研究这个也看了不少资料,其中阮一峰的博客写的很详细,这里转载一下. 一.什么是deferr ...

  2. 【转帖】关于sql server 2008 的mdf收缩问题

    原帖地址:http://social.msdn.microsoft.com/forums/windowsazure/pt-br/388f92e1-9a1e-497d-bde1-6664561fd44e ...

  3. php hash_hmac 与python hmac 区别

    使用 HMAC 方法生成带有密钥的哈希值 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = fal ...

  4. .net 编译原理

    这听起来像是个非常高大上的名字,上学的时候我们学过的编译原理或者编译技术实际上是在讲如何将高级程序语言如C++编译为计算机可以理解的汇编语言,这里说的编译原理只是想说明在.NET的世界里编译这件事儿和 ...

  5. python笔记-基础入门

    Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单. 2.易于阅读:Python代码定义的更清晰. 3.易于维护:Python的成功在于 ...

  6. Jafka Broker代码阅读之总览

    从本文开始,笔者将尝试从源码角度解读Jafka(Kafka)的特性,探究其背后的实现原理与技术.前面讲解Jafka Broker的文章中有提到下面这段启动服务端的代码,我们就从这里开始. Proper ...

  7. Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

    0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string( ...

  8. ubuntu 自动清理/tmp目录

    在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,如果不想让他自动清理的话,只需要更改rcS文件中的TMPTIME的值. 我们看如何来修改 sudo vi /etc/default ...

  9. Learning to Compare: Relation Network 源码调试

    CVPR 2018 的一篇少样本学习论文 Learning to Compare: Relation Network for Few-Shot Learning 源码地址:https://github ...

  10. 【SR】正则化超分辨率复原

    正则化超分辨率图像重建算法研究--中国科学技术大学 硕士学位论文--路庆春 最大后验概率(MAP)的含义就是在低分辨率图像序列已知的前提下,使高分辨率图像出现的概率达到最大.