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 ...
随机推荐
- linux--jdk安装与配置
此处以centos下jdkjdk1.8.0_161安装(此处为rpm安装事例)为例 1.java官网下载页找到对应版本的jdk下载链接地址 2.下载对应版本的rmp包到服务器,执行如下指令: wget ...
- JDK7 Garbage Frist
JDK7 G1新型垃圾回收器. http://www.infoq.com/cn/articles/jdk7-garbage-first-collector
- 亿级日PV的魅族云同步的核心协议与架构实践
声明:本文根据msup和魅族联合举办的<第三期魅族技术开放日-架构设计与优化>录音整理原创首发,转载或节选内容前需获授权. 嘉宾:沈辉煌,魅族高级架构师,魅族云同步负责人.2010年加入魅 ...
- jquery mobile demo
<!DOCTYPE html> <html> <head> <title>jQuery Mobile Demo</title> <me ...
- 基于Bootstrap样式的 jQuery UI 控件 (v0.5).
网址:http://www.shouce.ren/example/show/s/6444#download-bootstrap
- 你很熟悉CSS,却没掌握这些CSS技巧
转载来自 http://www.html5cn.org/article-9294-1.html 做前端开发的人都很熟悉CSS,一个漂亮的网页由HTML标签和控制这些标签布局的CSS组成,因此CSS在开 ...
- Django admin 注册多个app
class game(models.Model): content = models.TextField() def __str__(self): return 'To game %s' % self ...
- Spring框架中的AOP技术----注解方式
利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...
- python技巧之下划线(一)
1.python的moudles文件中__all__作用 Python的moudle是很重要的一个概念,我看到好多人写的moudle里都有一个__init__.py文件.有的__init__.py中是 ...
- poj1699(状态压缩dp)
可能没有完全读懂题意. 个人觉得 acca aa 答案应该是4. 然后就是dp了..这题数据量小很多方法都可以,数据也水暴力据说都能过.. 还有就是我竟然没有用扩展kmp优化下... 太无耻了,我是因 ...