Python 中的单例模式

单例就是解决在内存中始终只有一个实例对象的问题,在python中实现起来很简单,python中是通过new函数来分配内存的,举个栗子

​
class MusicPlayer:
    instance = None

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


m1 = MusicPlayer()
m2 = MusicPlayer()
print(id(m1), id(m2))

​

这样就实现了单例的需求,但是有一个问题,如果类里面显示书写了init函数,当创建m1,m2的时候就会调用两次初始化函数

怎么解决呢,也比较简单,如下

​
class MusicPlayer:
    instance = None
    init_flat = 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_flat:
            return
        print("-----init-----")
        MusicPlayer.init_flat = True


m1 = MusicPlayer()
m2 = MusicPlayer()
print(id(m1), id(m2))

​

这样就ok了

猜你喜欢

转载自blog.csdn.net/blastblade/article/details/81078254