前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >The process of Singleton creation

The process of Singleton creation

作者头像
lesM10
发布2019-08-26 16:43:40
6000
发布2019-08-26 16:43:40
举报

示例如下:

代码语言:javascript
复制
# Singleton pattern(i.e., a class where only one instance is ever created)
class Singleton(type):
    def __init__(self, *args, **kwargs):
        self.__instance = None
        super().__init__(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        if self.__instance is None:
            self.__instance = super().__call__(*args, **kwargs)
            return self.__instance
        else:
            return self.__instance

# Example
class Spam(metaclass=Singleton):
    def __init__(self):
        print('Creating Spam')


a = Spam()
b = Spam()
print(a is b)
c = Spam()
print(a is c)

在创建单例的过程中,有以下几点需要注意:

  • 在Spam定义中的metaclass=Singleton,使得class Spam是Singleton的一个instance。因此,class Spam的实例化 由Singleton完成,并且class Spam的初始化 由Singleton中的__init__方法 来完成。(下图中的self指向class Spam, 并且*args由 类定义的三个部分 构成:类名,继承,属性)

Screen Shot 2019-07-01 at 12.12.08 PM.png

  • class Spam也是callable, 执行a=Spam()会触发Singleton的__call__方法。在执行__call__中的super().__call__(*args, **kwargs)语句时,会顺带触发并执行class Spam的__init__方法。(执行效果如下图所示)

Screen Shot 2019-07-01 at 12.22.50 PM.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档