单例函数python 单例代码实现( 三 )


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的信息别忘了在本站进行查找喔 。

推荐阅读