您的位置:首页 > 编程语言 > Python开发

Python单例模式

2016-05-10 21:43 609 查看

工厂方法

class Class3(object):
def __init__(self):
self.id = 0

@staticmethod
def instance(*args, **kwargs):
if not hasattr(Class3, "_instance"):
Class3._instance = Class3(*args, **kwargs)
return Class3._instance
c1 = Class3.instance()
c2 = Class3.instance()

print(id(c1), c1.id)
c1.id = 1000
print(id(c2), c2.id)
#===============

(140619211572304, 0)
(140619211572304, 1000)


metaclass 元类

class singleton(type):
def __init__(cls, name, bases, dict):
super(singleton, cls).__init__(name, bases, dict)

def __call__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
cls._instance = super(singleton, cls).__call__(*args, **kwargs)
return cls._instance

class Class4(object):
__metaclass__ = singleton

def __init__(self):
self.id = 0

c1 = Class4()
c2 = Class4()

print(id(c1), c1.id)
c1.id = 1000
print(id(c2), c2.id)
#=============
(139687817574160, 0)
(139687817574160, 1000)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python singleton