本文主要是介绍py 单例模式及面向对象选课系统 day 30,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今日学习内容
- 昨日作业讲解
- 设计模式之单例模式
- pickle模块
作业讲解
# 题目
编写元类规定对象的所有数据值转大写
eg:
obj.name = 'jason'
print(obj.name) # JASON
class MytypeClass(type):
def __call__(self, *args, **kwargs):
args = [i.upper() for i in args]
return super().__call__(*args, **kwargs)
class MyClass(metaclass=MytypeClass):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __setattr__(self, key, value):
self.__dict__[key] = value.upper()
obj = MyClass('double', 'male')
print(obj.name)
print(obj.gender)
obj.hobby = 'dbj'
print(obj.hobby)
# 结果
DOUBLE
MALE
DBJ
设计模式
市面上的设计模式有23种,大致可以分为三类:
1.创建类
2.结构类
3.行为类
# 因为目前所学有限,所以只需学习单例模式即可
'使用频率高,学完元类即可使用的模式'
同一个类加括号产生的对象肯定是不一样的
类加括号实例化就会产生一个全新的对象
class Single(type):
new_obj = None
def __call__(self, *args, **kwargs):
if not self.new_obj:
obj = super().__call__(*args, **kwargs)
self.new_obj = obj
return self.new_obj
return self.new_obj
class MyClass(metaclass=Single):
def __init__(self, name):
self.name = name
obj1 = MyClass('jason')
obj2 = MyClass('tony')
print(id(obj1), id(obj2))
print(obj1.__dict__,obj2.__dict__)
'以上仅是单例模式的其中一种表现方式'
https://www.cnblogs.com/Dominic-Ji/p/10525994.html
单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点
pickle模块
# 简介
pickle模块是Python专用的持久化模块,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存贮
# 缺点
持久化后的字串是不可认读的,并且只支持Python环境,不能用作与其它语言进行数据交换
# 例子需求:将对象保存到文件,并且取出来之后还可以使用对象的功能
import pickle
class MyClass(object):
school = 'school'
def __init__(self, name):
self.name = name
def choose_course(self):
print('%s正在选课' % self.name)
obj = MyClass('double')
print(obj.school)
# school
obj.choose_course()
# double正在选课
with open(r'%s' % obj.name, 'wb') as f:
pickle.dump(obj, f)
with open(r'jason', 'rb') as f:
data = pickle.load(f)
print(data) # 取出文件中的对象
# <__main__.MyClass object at 0x000001335B8DDA20>
print(data.name)
# double
print(data.school)
# school
主要的方法:
在pickle中dumps()和loads()操作的是bytes类型,而在使用dump()和lload()读写文件时,要使用rb或wb模式,也就是只接收bytes类型的数据
1. pickle.dump(obj, file)
将Python数据转换并保存到pickle格式的文件内
withopen('data.pickle', 'wb') as f: pickle.dump(data, f)
2. pickle.dumps(obj)
将Python数据转换为pickle格式的bytes字串
import pickle
dic = {"k1":"v1","k2":123}
s = pickle.dumps(dic)
print(s)
3. pickle.load(file)
从pickle格式的文件中读取数据并转换为Python的类型
withopen('data.pickle', 'rb') as f:
data = pickle.load(f)
4. pickle.loads(bytes_object)
将pickle格式的bytes字串转换为Python的类型
import pickle
dic1 = {"k1":"v1","k2":123}
s = pickle.dumps(dic1)
dic2 = pickle.loads(s)
print(dic2)
选课系统的项目分析
项目的要求
选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海这2所学校
2. 创建linux , python , go这3个课程 ,linux\py在北京开, go在上海开
3. 课程包含:周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校
7. 提供三个角色接口
7.1 学员视图: 可以注册,交学费,选择班级
7.2 讲师视图: 讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员的成绩
7.3 管理视图:创建讲师,创建班级,创建课程
8. 上面的操作产生的数据都通过pickle序列化保存到文件里
项目的架构
# 三层架构展示
首先是展示层:
包括管理员视图、学生视图、讲师视图
其次是后台核心程序:
管理员功能、学生功能、讲师功能
最后是数据层:
models.by(存放以上三个角色的类数据)
db_hanlter(存取数据的功能文件)
Admin(存放管理员的信息)
Teacher(存放教师的信息)
Student(存放学生的信息)
项目目录搭建
启动文件 ---> start.py
conf文件夹 ---> settings.py
core文件夹 ---> src.py
admin_view.py
teacher_view.py
student_view.py
db文件夹 ---> db_handler.py
models.py
Admin ---> 管理员数据信息
Teacher ---> 教师数据信息
Student ---> 学生数据信息
interface文件夹 ---> admin_interface.py
teacher_interface.py
student_interface.py
lib文件夹 ---> common.py
项目说明文件 ---> readme.txt
项目所导模块文件 ---> requirements.txt
数据保存剖析
类产生的对象在保存的时候
自动创建一个与类名一样的文件夹名 将数据保存到该文件夹内
# 如何通过对象获取类对应的字符串名称
obj = Admin('jason',123)
# 固定方法
print(obj.__class__) # <class '__main__.Admin'> 类名
print(obj.__class__.__name__) # Admin 字符串
这篇关于py 单例模式及面向对象选课系统 day 30的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!