单例模式实现方式及pickle模块

昨日内容回顾

  • 面向对象之魔法方法

    类中在特定情况下会自动触发的方法称为魔法方法。常见的魔法方法有:

    __init__  # 需要传特征数据的对象生成时自动触发
    __str__  # 对象被执行打印操作时自动触发
    __call__  # 对象使用加括号调用时自动触发
    __getattr__  # 对象调用类内没有的名称时自动触发
    __getattribute__  # 对象调用名称时自动触发,优先级高于__getattr__
    __setattr__  # 对象对名称进行进行赋值操作时自动触发
    __enter__  # 对象作为with上下文管理的对象开始时自动触发,并将返回值赋值给as后变量名
    __exit__  # 对象作为with上下文管理的对象结束时自动触发
    
  • 面向对象之元类

    产生类的类即为元类。生成对象时,默认元类为type。

  • 元类定制类的产生

    与类生成对象类似,元类生成类时,会调用元类内的双下init方法,通过对元类的双下init进行派生完成定制。

  • 元类定制对象的产生

    对象加括号调用是调用类中的双下call方法,与此类似,类加括号调用生成对象实质是调用元类中的双下call方法,通过对元类的双下call方法进行派生完成对类生成对象的定制。

  • 魔法方法之双下new

    双下new是生成空对象的魔法方法。一个新对象的生成不是一步到位的,第一步是生成一个空对象,第二步是调用类中的双下init为名称空间添加名字,第三步将生成的新对象返回。

  • 设计模式简介

    设计模式分为三种类型:创建型、结构型及行为型,共23种模式。

今日内容概要

  • 单例模式的实现方法
  • 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('jason', 18)
        return cls.__instance

通过装饰器实现

定义装饰器,先实例化一个对象,如果调用者要重新实例化对象,则为调用者实例化,如果不需要实例化新对象,则返回已经实例化后的对象。

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  # Mysql=outer(Mysql)
class Mysql:
    def __init__(self, host, port):
        self.host = host
        self.port = port

pickle模块使用

pickle模块与json模块使用方法相同,其优点是可以序列化各种类型的数据,缺点是只可以在python中使用,且序列化后的对象在反序列化之后,要想使用必须要与实例化对象的类在同一文件中。

选课系统需求分析

选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建Linux , python , go 3个课程 , Linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供三个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里

选课系统结构框架

选课系统框架与ATM购物车框架相似,区别是:

选课系统用户交互层需要有3个接口,分别与接口层三个接口相照应;

由于要使用pickle模块,数据交互层需要分离出一个models模块以完成对类数据的操作;

数据存储时要区分用户身份,方便查看;

登录成功后不仅要记录用户名,还需要记录用户的身份。

posted @ 2022-11-09 20:24  Akazukis  阅读(33)  评论(0)    收藏  举报