❖ Python单例设计模式

参考:黑马程序员教程 - Python基础 面向对象

单例指一个对象只生成一个实例,也就是说对象只会在内存中分配一块区域。比如Music player,一次只能播放一个歌曲,只分配一块内存给它,不能同时播放两首歌。只有当它销毁了,才会生成一个空间给另一首歌。

image

要想达到单例这种效果、这种设计模式,就需要涉及内存分配问题。既然涉及到内存分配问题,就需要用到对象的内置函数中涉及内存分配的__new__函数来完成。

__new__方法有两个作用:

  • 在内存中为对象分配空间
  • 返回对象的引用

而实现单例设计模式,就是对__new__方法的重写

重写new方法时需要注意:

image

如果没有在重写new时候返回对象引用,那么在生成实例时,就只能得到一个None

重写单例对象的new方法的固定格式(必须要遵守):

def __new__(cls, *args, **kwargs):
    # Your code
    # ........
    # ........

    # Return the generated instance of the object
    return super().__new__(cls)

如果在new中实现单例的设计模式呢?
主要思路如下:

  • 添加一个类属性
  • 将这个类属性的初始值为None
  • 如果有实例被创建,这个类属性就为
  • 再有实例被创建时,如果发现类属性为None,则不创建,且返回之前已创建的实例
image

代码如下(非常固定,没什么需要改的):

class MyClass(object):

    instance = None

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

        if cls.instance is None:
            cls.instance = super().__new__(cls)
            
        return cls.instance

猜你喜欢

转载自blog.csdn.net/weixin_33722405/article/details/87474621