单例模式

单例模式: 

众多设计模式中的一种:让整个程序中这个类有且仅有一个实例

好处:

  1. 如果该类是控制整个程序的类(相当于司令),则这个类的对象只能有一个
  2. 如果该类的属性较多,内容庞大,并且数据可以进行共享,则创建这个类对象长久使用,不再回收,让这个类的对象保持仅有一个
    1. 节约计算机在创建或者收回对象时的消耗
    2. 该对象会一直占用这个空间,相当于使用空间来换取时间

操作方法

1、在这个类中创建一个类变量来存储这个类的实例

# 创建一个类变量存储这个类的实例
    instance = None

2、重写new函数,设置这个变量为空时才生成新对象,如果不为空则使用之前的对象

    def __new__(cls, *args, **kwargs):
        if cls.instance is None:                            # 如果这个对象是空的
            cls.instance = super().__new__(cls)             # 则使用父类的函数创建一个对象
        return cls.instance                                 # 将这个对象返回

3、测试运行

class MusicPlayer:

    # 创建一个类变量存储这个类的实例
    instance = None

    def __new__(cls, *args, **kwargs):
        print("创建对象的函数")
        if cls.instance is None:                            # 如果这个对象是空的
            print("调用父类的函数创建对象".center(100, "-"))
            cls.instance = super().__new__(cls)             # 则使用父类的函数创建一个对象
        return cls.instance                                 # 将这个对象返回

    def __init__(self):
        print("创建这个对象时会自动调用的函数,用于初始化对象")

    def play(self):
        print("进行播放")

if __name__ == '__main__':
    player1 = MusicPlayer()
    print("该对象的信息为:", player1)
    # 第二次创建对象
    player2 = MusicPlayer()
    print("该对象的信息为:", player2)

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值