monostate 状态_python设计模型-单例模式

cls:类对象

self:实例对象

单例 Singleton: 类只提供一个实例对象修改_init_

class Singleton(object):

def __new__(cls): #负责创造对象实例

if not hasattr(cls, 'instance'):

cls.instance = super(Singleton, cls).__new__(cls)

return cls.instance

s1 = Singleton()

s2 = Singleton()

s1 is s2

#True

2.通过元类的方法

一切皆对象,int的类型的类型是type.

类的定义由它的元类决定。

类A的创建: A = type(name,bases,dict)

name: 类名

bases: 基类名

dict: 属性变量

class MetaSingleton(type):

_instances ={}

def __call__(cls,*args,**kwargs):

if cls not in cls._instances:

cls._instances[cls] = super(MetaSingleton,\

cls).__call__(*args,**kwargs)

return cls._instances[cls]

l1 = Logger()

l2 = Logger()

l1 is l2 # True

单态 Monostate:所有实例对象共享相同状态.__dict__ : 存储类的传统通过__init__方法

class Borg:

__shared_state = {"a":1}#类成员,类的__dict__中

def __init__(self):

self.b =2

self.__dict__ = self.__shared_state

self.c = 3#实例

Borg.__dict__

mappingproxy({'__module__': '__main__',

'_Borg__shared_state': {'a': 1},

'__init__': ,

'__dict__': ,

'__weakref__': ,

'__doc__': None})

b1 = Borg()

b1.__dict__

{'a': 1, 'c': 3}

Borg.__dict__

mappingproxy({'__module__': '__main__',

'_Borg__shared_state': {'a': 1, 'c': 3},

'__init__': ,

'__dict__': ,

'__weakref__': ,

'__doc__': None})

b2 = Borg()

b1 is b2 #False

b2.d =5

b1.__dict__

{'a': 1, 'c': 3, 'd': 5}

2. 通过 __new__方法

class Borg:

_shared_state = {}

def __new__(cls,*args,**kwargs):

obj = super(Borg,cls).__new__(cls,*args,**kwargs)

obj.__dict__ = cls._shared_state

return obj

b1 = Borg()

b2 = Borg()

b1.a =1

b2.a # 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值