cls._instance = None
def __call__(cls, *args, **kwargs):
if cls._instance is None
# 以下不要使用'cls._instance = cls(*args, **kwargs)', 防止死循环,
# cls的调用行为已经被当前'__call__'协议拦截了
# 使用super(Singleton, cls).__call__来生成cls的实例
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance
class Foo(object): #单例类
__metaclass__ = Singleton
a = Foo()
b = Foo()
a is b
True
a.x = 1
b.x
1
使用__new__
__init__不是Python对象的构造方法,__init__只负责初始化实例对象,在调用__init__方法之前,会首先调用__new__方法生成对象,可以认为__new__方法充当了构造方法的角色 。所以可以在__new__中加以控制,使得某个类只生成唯一对象 。具体实现时可以实现一个父类,重载__new__方法,单例类只需要继承这个父类就好 。
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
class Foo(Singleton): #单例类
a = 1
关于python单例模式求教大佬因为在__new__函数里给__instance赋了新值_
__new__函数的作用就是,如果__instance还是None,就给cls.__instance新值 , 然后返回 __instance的值
python类里面的函数怎么单例# mysingleton.py
class My_Singleton(object):
def foo(self):
pass
my_singleton = My_Singleton()
将上面的代码保存在文件 mysingleton.py 中,然后这样使用:
from mysingleton import my_singleton
【单例函数python 单例代码实现】单例函数python的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于单例代码实现、单例函数python的信息别忘了在本站进行查找喔 。
推荐阅读
- 也许在密歇根视频讲了什么,也许在密歇根短片
- css打印网页加上页码,css 打印页眉 页脚
- 进电商物流如何,电商物流业务操作流程
- ids电视屏幕是什么意思,ied电视是什么意思
- 有哪些公司在用go语言 有哪些公司在用go语言编程
- 闰年计算c语言编程,闰年怎么算c语言编程
- 虚拟机如何通过net连接网络,虚拟机的网络怎么连上本机的局域网
- go语言切片如何理解 go 切片append
- 鸿蒙系统正在充电,鸿蒙充满电提示