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)用户登录
=选择=>>:')
    if ch=='1':
        register.register()    #注册模块
        tag=False
    elif ch=='2':
        login.login()       #登录
        tag=False

tag=True
while tag:
    ch=input('1)添加学生  2)添加老师  3)显示学生信息  4)显示老师信息
=选择(q退出)=>>:')
    if ch=='1':
        add.student()        #添加学生对象
    elif ch=='2':
        add.teacher()        #添加老师对象
    elif ch=='3':
        add.student_info.all_info()         #查看所有学生的信息
    elif ch=='4':
        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)
原文地址:https://www.cnblogs.com/zihe/p/7121571.html