今日内容

单例模式实现的多种方式

方式一:
class C1:
__instance = None def __init__(self,name,age):
self.name = name
self.age = age @classmethod
def singleton(cls):
if not cls.__instance:
cls.__instance = cls('jason',18)
return cls.__instance obj = C1.singleton()
obj1 = C1.singleton()
print(id(obj),id(obj1)) 方式二:
class Mymeta(type):
def __init__(self, name, bases, dic): # 定义类Mysql时就触发
# 事先先从配置文件中取配置来造一个Mysql的实例出来
self.__instance = object.__new__(self) # 产生对象
self.__init__(self.__instance, 'jason', 18) # 初始化对象
# 上述两步可以合成下面一步
# self.__instance=super().__call__(*args,**kwargs)
super().__init__(name, bases, dic) def __call__(self, *args, **kwargs): # Mysql(...)时触发
if args or kwargs: # args或kwargs内有值
obj = object.__new__(self)
self.__init__(obj, *args, **kwargs)
return obj
return self.__instance class Mysql(metaclass=Mymeta):
def __init__(self,name,age):
self.name = name
self.age = age
obj1 = Mysql()
obj2 = Mysql()
print(id(obj1), id(obj2))
obj3 = Mysql('tony', 321)
obj4 = Mysql('kevin', 222)
print(id(obj3), id(obj4)) 方式三:
#基于模块的单例模式:提前产生一个对象 之后到模块使用
class C1:
def __init__(self,name):
self.name = name obj = C1('jason') def outer(cls):
_instance = cls('jason',18)
def inner(*args,**kwargs):
if args or kwargs:
obj = cls(*args,**kwargs)
return obj
return _instance
return inner() @outer
class Mysql:
def __init__(self,name,age):
self.name = name
self.age = age obj2 = Mysql()
obj1 = Mysql()
print(obj2 is obj1)

pickle序列化模块

优势:能够序列化python中的所有类型
劣势:只能够在python中使用 无法跨语言传输 需求:产生一个对象并保存到文件中 取出来还是一个对象 class C1:
def __init__(self,name):
self.name = name def func(self):
print('hhhh')
def func1(self):
print('xxxx') obj = C1('jason')
import pickle
with open(r'a.txt','wb')as f:
pickle.dump(obj,f) with open(r'a.txt','rb')as f
date = pickle.load(f)

选课系统需求分析

选课系统
角色:学校、学员、课程、讲师
要求:
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.学生功能
注册功能
登录功能
选择学校
选择课程
查看课程分数

选课系统架构设计

三层架构
参考群内截图
与ATM架构设计的差异
1.第一层做分层展示
2.第三层创建models.py存储所有的类 只有该py文件内的代码有资格调用db_handler

选课系统目录搭建

基于软件开发目录规范即可

选课系统功能搭建

空函数 循环 功能字典

最新文章

  1. mybatis- spring 批量实现数据导入数据库
  2. Go语言实现简单的一个静态WEB服务器
  3. FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”
  4. jq 操作radio,设置选中、获取选中值
  5. 我们可以用SharePoint做什么
  6. ios-滚动导航条页面
  7. [Flex] ButtonBar系列——arrowKeysWrapFocus属性如果为 true,则使用箭头键在组件内导航时,如果击中某一端则将折回。
  8. winpcap 发送接收速率
  9. Eclipse搭建Android开发环境(安装ADT,Android4.4.2)(转)
  10. destoon实现底部添加你是第几位访问者的方法
  11. 一行一行分析JQ源码学习笔记-05
  12. 【源码解析】BlockManager详解
  13. 《并行程序设计导论》——MPI(Microsoft MPI)(1):Hello
  14. oracle学习笔记(一) oracle 体系结构简单介绍以及创建表空间和用户
  15. [Swift]LeetCode353. 设计贪吃蛇游戏 $ Design Snake Game
  16. [Android] Android RxJava2+Retrofit2+OkHttp3 的使用
  17. 前端技术之--CSS
  18. [Linux] Configure iSCSI on Linux5 (both target and initiator)
  19. java8_api_stream
  20. Go调试工具—— Delve

热门文章

  1. 怎样在vue中隐藏el-form-item中的值、设置输入框的值是只读
  2. 在mybatis中#{}和${}的区别
  3. 我要手撕mybatis源码
  4. 再有人说synchronized是重量级锁,就把这篇文章扔给他看
  5. python更改文件后缀名
  6. 还在使用@Autowrired注入?不妨试试@RequiredArgsConstructor
  7. 35.ListSerializer详解
  8. 22.通用视图GenericAPIView、属性和方法
  9. 13.内建函数eval()
  10. js判断手机系统是android还是ios?