首页 > 专栏

python:单例模式--使用__new__(cls)实现

更新时间:2023-05-28 08:42:14 阅读: 评论:0

法考报考条件-母爱伟大

python:单例模式--使用__new__(cls)实现
2023年5月28日发(作者:民俗旅游)

python:单例模式--使⽤__new__cls)实现

单例模式:即⼀个类有且仅有⼀个实例。

那么通过python怎么实现⼀个类只能有⼀个实例呢。

class Earth:

"""

假如你是神,你可以创造地球

"""

print '欢迎来到地球'

# ⽣成⼀个地球

a = Earth()

print id(a)

# 再⽣成⼀个地球

b = Earth()

print id(b)

输出:

欢迎来到地球

53356616

59869960

从上⾯例⼦可以看到,地球被创建了两次,因为地球只能有⼀个,所以Earth类只能有⼀个实例,所以需要单例模式实现。

python中,⼀个类创建对象实例是通过调⽤⽗类object __new__(cls)⽅法来创建对象的

我们可以通过重写 __new__(cls)⽅法去实现类只创建⼀个实例,再创建的实例返回上⼀次的对象的引⽤。

class Earth(object):

"""

假如你是神,你可以创造地球

"""

# 定义⼀个类属性做判断

instance = None

def __new__(cls, *args, **kwargs):

# 如果instance为空则说明是第⼀次创建实例

# 通过⽗类的__new__(cls)创建实例

if ce == None:

# 调⽤⽗类的__new__(cls)⽅法创建实例,并将该实例赋值给类变量instance,此时该变量的值从None变为该实例

ce = object.__new__(cls)

# print ce

# 返回实例化对象

return ce

el:

# 返回上⼀个对象的引⽤

return ce

# print '欢迎来到地球'

print '原始的instance值为:%s' % ce

# ⽣成⼀个地球

a = Earth()

# 创建实例后的instance

print '创建实例后的instance值为:%s' % ce

print id(a)

# 再⽣成⼀个地球

b = Earth()

print id(b)

输出:

原始的instance值为:None

创建实例后的instance值为:<__main__.Earth object at 0x0E10>

50925072

50925072

可以看到两次的id相同,为同⼀个对象

参考:

多种实现单例模式:

舞蹈课教案-创意美术教案

python:单例模式--使用__new__(cls)实现

本文发布于:2023-05-28 08:42:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1685234534182556.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:python:单例模式--使用__new__(cls)实现.doc

本文 PDF 下载地址:python:单例模式--使用__new__(cls)实现.pdf

下一篇:返回列表
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|