今日内容总结
单例模式实现的多种方式
#方式一
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序列化保存到文件里
选课系统结构设计
