首页 > 编程语言 >进入python的世界_day30_python基础—— 单例设计模式、pickle模块、选课系统初步搭建

进入python的世界_day30_python基础—— 单例设计模式、pickle模块、选课系统初步搭建

时间:2022-11-09 19:23:17浏览次数:39  
标签:__ 序列化 name 选课 python self 设计模式 pickle cls

一、面向对象——单例模式代码实操

​ 方法有很多,其实就是定制产生类,或者产生对象

1.基于双下new,控制实例化对象的条件

class MyClass:

    _instance = None

    def __new__(cls, *args, **kwargs):

        if not cls._instance:

            cls._instance = super().__new__(cls)

        return cls._instance

    def __init__(self, name, age):

        self.name = name

        self.age = age


a = MyClass('jack', 88)

b = MyClass('tom', 66)

print(id(a), id(b))

2.利用元类,元类是用于创建类对象的类,类对象创建实例对象时一定会调用双下call方法,因此控制双下call始终只创建一个实例即可

class Singleton(type):
    def __call__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super().__call__(*args, **kwargs)

        return cls._instance


class A(metaclass=Singleton):
    pass


foo1 = A()

foo2 = A()

print(id(foo1), id(foo2))
>>>
2528927388480 2528927388480

3.基于模块的单例,创一个类,把这个类的文件当作模块,导模块,导了一次就不会再导,所以一定就只有一个对象

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

obj = C1('jason')
——————————————————————————————————————
在别的文件导一下创这个类的文件(导模块嘛),不管别的文件点多少次,对象不会变

二、pickle序列化模块

和我们前一阵学的json类似,都是序列化数据用来存取,能够实现任意对象与文本之间的相互转化,四种表达用法也是和json一致

与json的区别:

1.pickle转都是对象与二进制之间的转化

2.json序列化后是字符串,pickle序列化后是字节类型

3.json(文本转换形式下)转换后的数据我们看得懂,pickle是完全看不懂

4.json打开被序列化文件以文本形式打开,而pickle只能以二进制模式打开

5.json通吃很多编程语言,而pickle离开Python就不行

6.pickle序列化对象后,可以直接在当前py文件下用句点符访问到名称空间

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

    def func1(self):
        print('来自 func1')

    def func2(self):
        print('来自 func2')


obj = C1('jack', 28)

import pickle

with open(r'a.txt', 'wb') as f:
    pickle.dump(obj, f)
with open(r'a.txt', 'rb') as f:
    info = pickle.load(f)
print(info)
info.func1()
info.func2()
print(info.name)
>>>
<__main__.C1 object at 0x000001C2A8D06EE0>
from func1
from func2
jack

三、选课系统需求分析

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

四、选课系统架构设计

​ 其实还是前一阵写ATM系统的三层框架,但是start.py不存在bin里而是放在根目录,第三层数据层新增一个模块models用来存放所有的类,如果要调用数据做事情得先经过models(其实是强行加的用来练习对面向对象的熟练程度)

​ 大框架还是第一层是用户视图层,不过为了让这个系统真的像个正儿八经的系统,第一层只展示不同身份的用户的视觉界面,选啥系统再对接到啥接口层上去

标签:__,序列化,name,选课,python,self,设计模式,pickle,cls
From: https://www.cnblogs.com/wznn125ml/p/16874873.html

相关文章

  • HeadFirst设计模式-装饰者模式
     C++代码#pragmaonce#include<string>usingstd::string;classBeverage{public:Beverage(){}virtual~Beverage(){}......
  • 浅谈PHP设计模式的命令模式
    简介:命令模式,又称之为动作模式或者事务模式,属于行为型的设计模式。将不同的请求封装成不同的请求对象,以便使用不同的请求;角色都会用饭馆来举例子:命令下达者:顾客命令......
  • 学生选课系统
    学生选课系统业务需求角色:学校学院课程讲师 要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux\py在北京开,go在上海开3.课程......
  • 选课系统
    选课系统选课系统需求分析选课系统 角色:学校、学员、课程、讲师 要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux\py在北......
  • 单例模式实现的多种方式、pickle序列化模块、选课系统需求分析等
    目录单例模式实现的多种方式方式一:方式二:方式三方式四pickle序列化模块选课系统需求分析功能提炼选课系统架构设计三层架构选课系统目录搭建选课系统功能搭建单例模式实......
  • Python函数-6
    一.函数的嵌套函数的嵌套就是一个函数内还有多个函数而且函数内部的变量在函数外部不能运行如果一个变量在外部函数和内部函数都有,且代码块在内部函数里,就会优先执行函......
  • python中@classmethod @staticmethod的使用方法及区别
    https://stackoverflow.com/questions/136097/difference-between-staticmethod-and-classmethod@staticmethod:如果类里面不想某个方法使用类属性和调用其它方法就可以使......
  • 02python快速上手
    这一篇是环境准备,主要是说明如何安装Python和运行交互式环境。安装和运行交互式解析器如果你使用的是MacOS和Linux/UNIX机器的话,大部分都默认安装了Python,不过需要注意的......
  • 选课系统
    选课系统项目要求#项目分析: 选课系统 角色:学校、学员、课程、讲师 要求:1.创建北京、上海2所学校2.创建linux,python,go3个课程,linux......
  • 设计模式利剑三--抽象工厂方法模型
    定   义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类优   点:           1、封装性,每个产品的实现类不是高层模块要关心的,他们......