Python面向对象之单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某

一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就

能派上用场。

单例类:如果一个类,从头到尾只开辟了一块属于对象的空间,那么这个类就是一个单例类。

准备工作:

----#__init__()方法叫初始化方法

----#__new__()方法叫构造方法

例子:

class A:

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

print('new')

def __init__(self):

print('init')

a = A()

结果:new

class A:

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

print('new')

obj = super().__new__(cls)

return obj

def __init__(self):

print('init')

a = A()

结果:new

init

需要知道,我们实例化对象的时候,会有三个步骤:

1.开辟一个空间,给对象

2.把对象的空间传给self,并执行init方法

3.将这个对象的空间返回给调用者

第一步的开辟一个空间就是构造函数 __new__()来完成的。

第二步,将对象空间传给self,我们从例子可以看出,

不返回空间,self是不会收到的,所以我们给出了例子

这样第二步就执行了。

第三步,我们将对象的空间返回给调用者。

__new__()方法在什么时候执行?

答:在实例化之后,__init__()之前,先执行 __new__()来创建一块空间

了解这些,我们就开始写一个单例类:

单例类:如果一个类,从头到尾只开辟了一块属于对象的空间,那么这个类就是一个单例类。

例子:

class Single:

__INSTANCE = None

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

if not cls.__INSTANCE:

cls.__INSTANCE = super().__new__(cls)

return cls.__INSTANCE

s0 = Single()

s1 = Single()

print(s0)

print(s1)

结果:

class Foo:

__INSTANCE = None

@classmethod

def get_instance(cls):

if cls.__INSTANCE:

return cls.__INSTANCE

else:

cls.__INSTANCE = Foo()

return cls.__INSTANCE

f0 = Foo()

f1 = Foo()

print(f0.get_instance())

print(f1.get_instance())

结果:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810A0ZDYS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券