29

今日内容总结

单例模式实现的多种方式

#方式一
	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()
    obj2 = C1.singleton()
    此时上面三个对象是一个东西 但我们可以传入参数来创造不同的对象
    obj3 = C1('tt',28)
    obj4 = C1('aa',38)
    此时这两个对象是不一样的
    
#方式二
	class Mymeta(type):
        def __init__(self,name,bases,dic):
            self.__instance =  object.__new__(self)
            self.__init__(self,__instance,'jason',18)
            super().__init__(name,bases,dic)
            
        def __call__(self,*args,**kwargs):
            if args or 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 = Musql()
    在创建对象不传入参数时 无论创造多少个对象都是一样的
    
#方式三
	class C1:
        def __init__(self,name,age):
            self.name = name
            self.age = age
            
     obj = C1('xiaochen',19)
     '''将上述封装到一个py文件中 只需要调用这个文件的obj即可'''
        
#方式四
	def outer(cls):
        _instance = cls('xiaochen',19)
        def inner(*args,**kwargs):
            if args or kwargs:
                obj = cls(*args,**kwargs)
                return obj
            return _insance
        return inner
    @outer
    class Mysql:
        def __init__(self,host,port):
            self.host = host
            self.port = port
            
   obj = Mysql()      
	只要不传参那么生成的对象就是不变的

pickle序列化模块

#优势:能够序列化所有数据类型的数据(包括对象)
#劣势:只能在python中使用 并且无法跨语言传输

实例 (做到将对象并保存 再拿出来时还是一个对象)
class C1:
    def __init__(self,name,age):
        self.name = name
        sele.age = age
        
    def func1(self):
        print('from func1')
        
obj = C1('xiaochen',19)

import json
with open('a.txt','w',encoding = 'utf8')as f:
    json.dump(obj,f)
'''之前所学的json模块无法解决此类问题'''
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)
print(data.name)
均可以执行 说明>>>该读取的数据就是一个对象

选课系统需求分析

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

选课系统结构设计

image

posted @ 2022-11-09 19:54  早点早点灬  阅读(44)  评论(0)    收藏  举报