单例模式

在确定“类中的属性与方法”不变时,需要反复调用该类

产生不同的对象,会产生不同的内存地址,造成资源浪费

让所有类在实例化时,指向同一个内存地址,称之为单例模式

(无论产生多少个对象,都会指向单个 实例)

优点:节省空间

__new__方法实现单例

要知道,虽然__new__方法接受的参数和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法,所以,当我们创建一个类的时候,编译器会先执行__new__方法,再执行__init__方法。


```python class Test:
def __new__(cls, *args, **kwargs):
    if not hasattr(cls,'_instance'):  #hasattr(a,b)方法是判断a里边有没有b,在这里就是判断cls(本类)里边是否存在名为'_instance'的变量
        cls._instance = super().__new__(cls)  
    return cls._instance

第一个参数cls是当前正在实例化的类。

如果要得到当前类的实例,应当在当前类中的__new__()方法语句中调用当前类的父类 的__new__()方法。

a = Test()
print(id(a))
b = Test()
print(id(b))

<br>


> 2400710875016
> 2400710875016

> 原理:
>
> 每次调用\__new__方法,都会判断一次本类有没有实例化对象产生过,没有的话,就创建一个,如果有的话,就返回以前创建过的那个对象,并将新的参数赋给原来的实例,对其进行更新。
 posted on 2019-11-29 17:41  Rannie`  阅读(288)  评论(0编辑  收藏  举报
去除动画
找回动画