Python单例模式

实现单例模式的三种方法:类实现、装饰器实现和元类实现

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

实现单例模式的三种方法:类实现、装饰器实现和元类实现

#coding-utf-8

#单例模式

#类的方式实现单例模式
'''class Singleton(object):

    _instance = None
    def __init__(self):
        print ("__init__")
        pass

    @staticmethod
    def __new__(cls, *argv, **kwargv):
       print ("__new__")
       if not cls._instance:
           cls._instance = super(Singleton, cls).__new__(cls,*argv, **kwargv)

       return cls._instance    

class A(Singleton):pass'''

#使用装饰器的方式实现单例模式
'''def Singleton(cls):
    instances = {}
    
    def getinstance(*argv, **kwargv):
        if cls not in instances:
            instances[cls] = cls(*argv, **kwargv)   
        return instances[cls]

    return getinstance

@Singleton
class A(object):
    def __init__(self, parm):
        print ("class A __init__:%s" %(parm))'''

#使用元类的方法实现单例模式
class Singleton(type):
    instances = {}
    def __call__(self, *argv, **kwargv):
        if self not in self.instances:
            print ("!!!not have instances")
            self.instances[self] = super(Singleton, self).__call__(*argv, **kwargv)
        return super(Singleton, self).__call__(*argv, **kwargv)    

    def __new__(mcs, name, bases, namespace, **kwargs):
        print ("Singleton new")
        return super(Singleton, mcs).__new__(mcs,name, bases, namespace, **kwargs)

class A(metaclass = Singleton):
    def __init__(self):
        self.aa = 1

if __name__ == "__main__":
    a = A()
    b = A()
    print (id(a))
    print (id(b))

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120211.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ubuntu安装yarn

    ubuntu安装yarn1、安装yarnsudoapt-getupdatesudoapt-getupgradecurl-sShttps://dl.yarnpkg.com/debian/pubkey.gpg|sudoapt-keyadd-echo”debhttps://dl.yarnpkg.com/debian/stablemain”|sudotee/etc/apt/s…

    2022年5月25日
  • win10闲置服务如何关闭_任务管理器中服务主机进程有什么用

    win10闲置服务如何关闭_任务管理器中服务主机进程有什么用在使用Windows10系统电脑过程中,一位用户打开任务管理器时发现一些空闲进程会占用比较多的CPU,因此想知道能否将它关闭掉。为此,小编整理了关闭方法,有需要的用户,请来看看win10系统空闲进程占用cpu怎么关闭吧。windows10系统使用过程中,会默认运行很多进程,但有许多是空闲进程,且会占用很多空间,因此win10系统空闲进程占用cpu多最好的解决方法就是关闭空闲进程,如何关闭空闲进程呢…

    2022年10月20日
  • Kali Linux 2020.4 安装教程 超级详细 适合新手入门

    Kali Linux 2020.4 安装教程 超级详细 适合新手入门KaliLinux安装教程一、虚拟机配置二、KaliLinux配置三、更新软件包更新时间:2021年1月22日使用版本:5.9.0镜像官方下载地址:https://www.kali.org/downloads一、虚拟机配置使用虚拟机软件:VMwareWorkstationPro16首先点击创建新的虚拟机,先择典型(推荐)完成选择后点击下一步这里我们选择稍后安装操作系统完成选择后点击下一步此处客户机操作系统选择Linux,版本选择Debian10.x

    2022年5月22日
  • VS2012 产品密钥「建议收藏」

    VS2012 产品密钥「建议收藏」vs2012产品激活码,序列号,旗舰版(utimate)YKCW6-BPFPF-BT8C9-7DCTH-QXGWC

    2022年10月15日
  • Android Studio Unable to find EOCD signature解决方法

    Android Studio Unable to find EOCD signature解决方法今天早上来公司突然发现项目打包不了研究了一下应该是gradle版本冲突了解决方法就是Build

    2022年4月29日
  • 腾讯云申请免费ssl证书(1年有效期)

    腾讯云申请免费ssl证书(1年有效期)SSL证书就是遵守SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能的文件。当前大多数的ssl证书是收费的,我所知道的只有腾讯云可以申请到1年

    2022年7月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号