python-----单例设计模式

代码笔记-----------

"""
什么是设计模式?  设计模式是前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是都是针对某一特定问题的成熟解决方案
设计模式有什么作用?  使用设计模式是为了可重用代码、让代码更容易被他人理解,提高代码的可靠性

什么是单例设计模式? 让类创建的对象,在系统中只有唯一的实例。每一次使用类名()创建实例对象,内存地址是相同的

咱们要用到单例设计模式就得用到一个内置方法__new__()
在我们类名创建对象时,python解释器首先会调用__new__()方法,来为对象分配空间
__new__()是一个有Object基类提供的内置静态方法主要作用有两个:
1、在内存为实例对象分配空间
2、返回实例对象的引用
python解释器在获得对象的引用后,将引用作为对象的第一个参数传给__init__()方法
咱们因为__new__()方法是Object基类的内置方法,所以咱们使用__new__()方法,是重写的Object的方法,重写__new__()方法的代码非常固定
重写__new__()方法一定要return super().__new__(cls)返回对象的引用,否则python解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法
注意:__new__()是一个静态方法,在调用需要主动传递cls参数
"""
class A:
    new=None #记录第一个对象的引用
    def __new__(cls, *args, **kwargs):
        print("这是new方法")
        if cls.new is None: #判断类属性new是否为None,是则第一个对象还没创建,需要给了new赋值第一次对象的引用;否则不是第一次对象创建了,就可以直接返回第一次对象的引用
            cls.new=super().__new__(cls) #对象为None时,给new赋值第一次对象的引用

        return cls.new #赋值成功后,就返回对象的引用

    def __init__(self,name,age):
        self.name=name
        self.age=age

    def show(self):
        print("%s , %d" % (self.name, self.age))

"""主程序"""
a=A("老王",60)
a.show()
print(a)

b=A("小美",18)
b.show()
print(b)

运行结果-------------

python-----单例设计模式_第1张图片

 我们发现两个对象的内存地址的引用是一样的,这就是单例!

 

你可能感兴趣的:(python,python)