码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python实现单例模式


    使用函数装饰器

    1. def singleton(cls):
    2. _instance = {}
    3. def inner():
    4. if cls not in _instance:
    5. _instance[cls] = cls()
    6. return _instance[cls]
    7. return inner
    8. @singleton
    9. class Demo(object):
    10. def __init__(self):
    11. pass
    12. def test():
    13. b1 = Demo()
    14. b2 = Demo()
    15. print(b1, b2)

    使用类装饰器

    1. class single1:
    2. def __init__(self, cls):
    3. self.cls = cls
    4. self.cls.instance = None
    5. def __call__(self, *args, **kwargs):
    6. if not self.cls.instance:
    7. self.cls.instance = self.cls(*args, **kwargs)
    8. return self.cls.instance
    9. @single1
    10. class Demo:
    11. def test(self):
    12. print("hello world")
    13. def test():
    14. b1 = Demo()
    15. b2 = Demo()
    16. print(b1, b2)

    基于__new__ 方法实现

    1. import threading
    2. class Demo(object):
    3. _instance_lock = threading.Lock()
    4. def __init__(self):
    5. pass
    6. def __new__(cls, *args, **kwargs):
    7. if not hasattr(Demo, "_instance"):
    8. with Demo._instance_lock:
    9. if not hasattr(Demo, "_instance"):
    10. Demo._instance = object.__new__(cls)
    11. return Demo._instance
    12. def test():
    13. b1 = Demo()
    14. b2 = Demo()
    15. print(b1, b2)

    打印结果显示b1和b2的地址一致:

  • 相关阅读:
    每日三题 11.10
    wps阶梯表格怎么做?wps阶梯表格制作教程
    trie树(前缀树)
    C++对象模型(6)-- 数据语义学:继承的对象布局(含虚函数)
    AI斗地主-按键精灵
    JavaScript 62 JavaScript 版本 62.2 JavaScript ES5
    【IoT-卫朋】智能硬件 | 产品按键设计
    Java实现自定义Hive认证账户密码
    赞不绝口!飞凌嵌入式全新子品牌ElfBoard好评如潮
    【Filament】Filament环境搭建
  • 原文地址:https://blog.csdn.net/watson2017/article/details/133383682
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号