Python的单例模式

Python单例模式

思路

1、单例模式,顾名思义只有一个对象

  • Python创建对象经过两个过程
    1. 给对象分配空间
    2. 初始化对象

2、所以如果想要只创建一个对象,则所有的对象指向同一地址就可以了

其中初始化 后面发现 既然对象 只有一个,也可以只初始化一次,实现的代码是优化后的结果

实现

假设有一个播放器类,则每次同时只能播放一首曲子

class MusicPlayer:
	
    # 定义类变量来记录对象是否已经创建过
    instance = None
    # 定义初始化标记变量记录对象是否已经被初始化过
    init_flag = False

    # 使用__new__方法分配地址,谨记三个参数和本方法需要把创建的对象返回
    def __new__(cls, *args, **kwargs):
        # 如果对象没有被创建过
        if cls.instance is None:
            # 使用父类的(object类)的__new__方法来创建对象
            cls.instance = super().__new__(cls)
        # 返回对象,以供__init__方法初始化
        return cls.instance

    # 使用__init__初始化对象
    def __init__(self):
        # 判断对象是否已经被初始化过
        if MusicPlayer.init_flag:
            # 初始化过对象则无需重复初始化对象
            return
        # 没有初始化过对象则先把,初始化标志置为True
        MusicPlayer.init_flag = True
        # 对对象进行初始化
        print("初始化方法")


musicPlayer1 = MusicPlayer()
musicPlayer2 = MusicPlayer()
musicPlayer3 = MusicPlayer()
print(musicPlayer1)
print(musicPlayer2)
print(musicPlayer3)

总结

  • 设计模式中,单例模式比较容易理解,即只一个类只创建一个对象,可以类比于Java中的单例模式。
    关键点就是把所有对象的引用指向同一个地址空间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值