python使用装饰器实现单例模式

本文介绍了一种使用Python装饰器实现单例模式的方法。单例模式确保一个类只有一个实例,通常用于控制实例数量或节省资源。通过装饰器,我们可以优雅地实现这一模式,避免多次实例化同一类。

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

# 装饰器实现单例模式
def singleton(cls, *args, **kwargs):
    instances = {}

    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return get_instance


@singleton
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print(self.name)

if __name__ == '__main__':
    student = Student('wang', 18)
    student.run()
    hshs = Student('kai', 21)
    hshs.run()


执行结果:
wang
wang

1、单例模式:

      即一个类有且只能有一个实例,有且只能实现一个实例,有时是为了控制实例个数,有时是为了节约系统资源。

2、用装饰器使用单例模式的原理 

      student = Student('wang', 18) 即相当于直接把  Student('wang', 18) 作用 singleton的第一个参数传入方法中,此时instance 为空,当这个类第一次实例化之后 instalce = {<class '__main__.Student'>:<__main__.Student object at 0x0000026CFBA5CF60>}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值