python singleton_解释python Singleton类

好的,在痛苦的细节中仔细研究一下:

class Singleton:隐式继承自Object,因为在python中,一切都是Object.

instance = None仅在模块加载时读取,并且将类级别变量实例设置为None一次,但可以由Singleton类的单个实例覆盖.

def __new__(cls):

if cls.instance is None:

cls.instance = super().__new__(cls)

return cls.instance

(首先,我认为他们把“cls”放在那里很奇怪,我知道他们为什么要这样做,因为它指的是整体课程,而不是那个课程的特定实例.但是,这可能让人感到困惑.不知道他们在看什么.无论如何…)

__new__是一个在__init__之前调用的魔术函数,大致类似于为类的新实例分配空间.这里,cls.instance在模块加载时设置为None,因此每次创建新的Singleton时都会完成此测试.由于在第一次创建Singleton时设置了cls.instance,因此super().__ new __(cls)也只被调用一次. Singleton的超类是Object.因此,super().__ new __(cls)的行为正是您所期望的任何其他类的行为.

如果,您正在创建Singleton的第二个(或第三个/第四个/第五个……)实例,则不会调用此super().__ new __(cls).而是返回类级别变量实例,这意味着不能创建Singleton的新实例.

当您打印Singleton的实例时,您可以看到0x10dbc0f60的内存地址对于两个“实例”都是相同的,因为cls.instance在__new__时间返回,您可以将其视为内存分配时间,然后调用__init__.

这是一个执行Singleton模式的好方法,因为为了创建一个单例类,现在,您所要做的就是继承Singleton并且已经完成了繁重的工作.你继续像往常一样使用__init__,不要担心.每次你去创建该类的“新”实例时,你都会得到相同的实例.完全在幕后.

这是非常先进的东西,但看起来有多简单. python是最棒的!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值