当前位置: Python基础教程 > 08-面向对象b > 阅读正文

python的单例模式

2021.6.21.   411 次   827字

单例模式, 是设计模式的一种, 适用于只需要一个实例的类, 比如音乐播放器

class MusicPlayer(object):
    #单例模式的对象引用
    instace = None
    
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)

        return cls.instance

player1 = MusicPlayer()
player2 = MusicPlayer()

print(player1)   #得到的地址相同, 是同一个对象
print(player2)

程序输出结果如下:

<__main__.MusicPlayer object at 0x000002A2A00A5F28>
<__main__.MusicPlayer object at 0x000002A2A00A5F28>

关于 __new__

此内置方法, 是在创建对象时, 自动被调用, 默认返回的是super().__new__(cls)

只需要把第一次创建的对象地址保存到类属性中, 后续返回此地址即可

一次初始化

虽然单单例对象只会创建一个, 但会多次初始化, 如果想要初始化一次, 可参考如下

class MusicPlayer(object):
    # 单例模式的对象引用
    instance = None
    init_flag = False

    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)

        return cls.instance

    def __init__(self):
        if MusicPlayer.init_flag:
            return
        MusicPlayer.init_flag=True

player1 = MusicPlayer()
player2 = MusicPlayer()

print(player1)  # 得到的地址相同, 是同一个对象
print(player2)

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群