首页 > 其他分享 >单例模式实现的多种方式,pickle序列化模块,选课系统整体搭建

单例模式实现的多种方式,pickle序列化模块,选课系统整体搭建

时间:2022-11-09 21:46:50浏览次数:44  
标签:__ .__ 选课 self 单例 Mysql 序列化 id

目录

单例模式实现的多种方式,pickle序列化模块,选课系统整体搭建

今日内容概要

  • 单例模式实现的多种方式
  • pickle序列化模块
  • 选课系统需求分析
  • 选课系统架构设计
  • 选课系统目录搭建
  • 选课系统功能搭建
注册 登录 装饰器

今日内容详细

单例模式实现的多种方式

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('jaosn', 18)
        return cls.__instance

obj1 = C1.singleton()
obj2 = C1.singleton()
obj3 = C1.singleton()
print(id(obj1), id(obj2), id(obj3))  # 2712128685168 2712128685168 2712128685168
obj4 = C1('kevin', 28)
obj5 = C1('tony', 33)
print(id(obj4), id(obj5))  # 2043671986072 2043671986016

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, **keargs)
        super().__init__(name, bases, dic)

    def __call__(self, *args, **kwargs):  # Mysql(...)时触发
        if args or kwargs:  # args或keargs内有值
            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))  # 2016985923368 2016985923368
obj3 = Mysql('tony', 321)
obj4 = Mysql('kevin', 222)
print(id(obj3), id(obj4))  # 2016985923536 2016985923480

'''基于模块的单例模式:提前产生一个对象 之后导模块使用'''

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, host, port):
        self.host = host
        self.port = port

obj1 = Mysql()
obj2 = Mysql()
obj3 = Mysql()
print(id(obj1), id(obj2), id(obj3))  # 1781874901120 1781874901120 1781874901120

obj4 = Mysql('1.1.1.3', 3307)
obj5 = Mysql('1.1.1.4', 3308)
print(id(obj4), id(obj5))  # 1781874901288 1781874901232

pickle序列化模块

优势:能够序列化python中所有的类型
劣势:只能够在python中使用 无法跨语言传输

需求:产生一个对象并保存到文件中 取出来还是一个对象

class C1:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func1(self):
        print('from func1')

    def func2(self):
        print('from func2')

obj = C1('jason', 18)

import pickle
with open('a.txt', 'wb') as f:
    pickle.dump(obj, f)

with open('a.txt', 'rb') as f:
    data = pickle.load(f)
print(data)  # <__main__.C1 object at 0x0000023DBF5DBFD0>
data.func1()  # from func1
data.func2()  # from func2
print(data.name)  # jason

选课系统需求分析

选课系统
角色:学校 学员 课程 讲师
要求:
	1.创建北京、上海两所学校
    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

选课系统目录搭建

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

选课系统功能搭建

空函数 循环 功能字典

标签:__,.__,选课,self,单例,Mysql,序列化,id
From: https://www.cnblogs.com/zpf1107/p/16875255.html

相关文章

  • 单例模式,选课系统
    目录今日内容概要今日内容详细单例模式实现的多种方式pickle序列化模块选课系统需求分析功能提炼选课系统架构设计选课系统目录搭建选课系统功能搭建作业今日内容概要......
  • 选课系统
    单例模式实现的多种方法方式1:使用类classC1:__instance=Nonedef__init__(self,name,age):self.name=nameself.age=age......
  • 单例模式、pickle序列化模块
    单例模式、pickle序列化模块单例模式什么是单例模式?单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只......
  • 单例模式实现的多种方式、pickle序列化模块、选课系统需求分析、功能提炼、选课系统架
    单例模式实现的多种方式classC1:__instance=Nonedef__init__(self,name,age):self.name=nameself.age=age@classmethod......
  • 选课系统
    选课系统需求分析角色:学校、学员、课程、讲师要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux/py在北京开,go在上海开......
  • 单例的实现多种方式与pickle模块
    目录单例的实现多种方式pickle对象序列化模块选课系统需求分析功能提炼选课系统架构设计单例的实现多种方式绑定类"""Author:clever-cattime:2022/11/9-1......
  • 进入python的世界_day30_python基础—— 单例设计模式、pickle模块、选课系统初步搭建
    一、面向对象——单例模式代码实操​ 方法有很多,其实就是定制产生类,或者产生对象1.基于双下new,控制实例化对象的条件classMyClass:_instance=Nonedef_......
  • 学生选课系统
    学生选课系统业务需求角色:学校学院课程讲师 要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux\py在北京开,go在上海开3.课程......
  • 选课系统
    选课系统选课系统需求分析选课系统 角色:学校、学员、课程、讲师 要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux\py在北......
  • 单例模式实现的多种方式、pickle序列化模块、选课系统需求分析等
    目录单例模式实现的多种方式方式一:方式二:方式三方式四pickle序列化模块选课系统需求分析功能提炼选课系统架构设计三层架构选课系统目录搭建选课系统功能搭建单例模式实......