魔法方法应用小练习
class MyDict(dict):
def __getattr__(self, item):
return self.get(item)
def __setattr__(self, key, value):
self[key] = value
d = MyDict(name='curry', pwd=111, hobby='read')
print(d.name)
d.abc = '叫地主'
d.name = 'curry NB'
print(d)
设计模式及单列模式
1.如何理解设计模式
在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路
2.设计模式总共有23种
3.设计模式的分类(三类)
创建型
结构型
行为型
4.设计模式之单例模式
类加括号调用多次只允许产生一个对象
class MyClass:
pass
obj1 = MyClass()
obj2 = MyClass()
obj3 = MyClass()
print(id(obj1), id(obj2), id(obj3))
"""正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象"""
'''有时候我们不希望类频繁的产生不同的对象
类中有很多很好用的方法 程序很多地方都需要使用(通过对象调用)
如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
'''
class MyMeTaClass(type):
instance = None
def __call__(self, *args, **kwargs):
if self.instance:
return self.instance
obj = super().__call__(*args, **kwargs)
self.instance = obj
return obj
class Single(metaclass=MyMeTaClass):
def __init__(self, name):
self.name = name
obj1 = Single('curry')
obj2 = Single('喂喂喂')
obj3 = Single('哈哈哈')
print(id(obj1), id(obj2), id(obj3))
print(obj1.name)
print(obj2.name)
print(obj3.name)
pickle模块
"""
pickle模块与json模块相似 都是用来做序列化反序列化的 并且pickle模块支持python模块所有数据类型
pickle模块劣势是不支持跨语言传输 兼容性不好
学习pickle模块是为了方便编写选课系统 我们需要将对象保存到文件 所以用该模块
后续不会用 而是用更高级的方法:ORM(对象关系映射)
"""
class MyClass:
def __init__(self,name):
self.name = name
def choice_course(self):
print('%s正在上网中' % self.name)
obj = MyClass('curry')
import pickle
with open(r'a.txt','wb')as f:
f.write(pickle.dumps(obj))
pickle.dumps(obj,f)
with open(r'a.txt','rb')as f:
data = pickle.load(f)
print(data)
print(data.name)
data.choice_course()
编写选课系统-项目分析
选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供三个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
功能分析
管理员功能(最核心)
1.注册
2.登录
3.创建讲师
4.创建学校
5.创建课程
讲师功能
1.注册
2.登录
3.选择教授课程
4.查看教授课程
5.管理课程分数
学生功能
1.注册
2.登录
3.选择学校
4.选择课程
5.查看分数
编写选课系统-系统架构设计
三层架构
功能展示层
src.py
admin_view.py
teacher_view.py
student_view.py
核心逻辑层
admin_interface.py
teacher_interface.py
student_interface.py
数据处理层
db_hanlder.py
model.py
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)