Python基础之单例

本文介绍了Python中单例设计模式的实现,重点讲解了如何通过`__new__`方法确保类只实例化一次,并提供了两个示例。理解如何在类创建对象时分配内存和调用初始化方法至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、单例设计模式

目的:类创建对象,在系统中只有唯一一个实例

每一个执行类名()返回对象在内存中,内存地址是相同的

2、__new__方法

使用类名()创建对象时,首先会使用__new__方法分配内存空间。

__new__方法是由object基类提供的内置静态方法,主要作用:

1.在内存中为对象分配空间

2.返回对象的引用

python解释器获得对象的引用后,将引用作为第一个参数传递给__init__方法

注意:重写__new__方法,必须要return super().__new__(cls),否则python解释器得不到获得内存空间的现象引用,就不会调用初始化方法。__new__方法是一个静态方法,在调用时需要主动传递cls参数。

class MusicPlayer(object):

    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)

    def __init__(self):
        print("初始化音乐播放对象")


player = MusicPlayer()
print(player)

3、python中的单例

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 not MusicPlayer.init_flag:
            print("初始化音乐播放对象")
            MusicPlayer.init_flag = True


player = MusicPlayer()
print(player)
player1 = MusicPlayer()
print(player1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值