单列模式实现的多种方法
单列模式实现的多种方法方式
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
obj1 = C1.singleton()
obj2 = C1.singleton()
obj3 = C1.singleton()
print =(id(obj1),id(obj2),id(obj3))
obj4 = C1('kevin',28)
obj5 = C1('tony',39)
print(id.(obj4),id(obj5)
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 = Mysql()
print(id(obj1), id(obj2))
obj3 = Mysql('tony', 321)
obj4 = Mysql('kevin', 222)
print(id(obj3), id(obj4))
'''基于模块的单例模式:提前产生一个对象 之后导模块使用'''
class C1:
def __init__(self, name):
self.name = name
obj = C1('jason')
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(obj1 is obj2 is obj3)
obj4 = Mysql('1.1.1.3', 3307)
obj5 = Mysql('1.1.1.4', 3308)
print(obj3 is obj4)
pickle序列化模块
优势:能够序列化python中所有的类型
缺陷:只能够在python中使用,无法跨语言传输
需求:产生一个对象并保存到文件中,取出来还是一个对象
class Myclass:
def __init__(self, name):
self.name = name
def choice_course(self):
print(f'{self.name}正在选课')
obj = Myclass('jason')
import pickle
"""pickle序列化把对象保存到文件中"""
with open(r'a.txt', 'wb') as f:
pickle.dump(obj, f)
"""pickle反序列化从文件中取出对象"""
with open(r'a.txt', 'rb') as f:
data = pickle.load(f)
print(data)
data.choice_course()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端