聊聊python里如何用Borg pattern实现的单例模式

 更新时间:2019年06月06日 09:29:54   作者:kid_learning  
这篇文章主要介绍了聊聊python里如何用Borg pattern实现的单例模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

有如下 borg pattern 的实现:

class Borg(object):
  __shared_state = {}

  def __init__(self):
    self.__dict__ = self.__shared_state
    self.state = 'Init'

  def __str__(self):
    return self.state

之前一直看不懂为什么 Borg class 要那样实现, 后来学到两个知识点后发现原来这么简单明了:

  • 关于 __shared_state:
    • 在 __init__(self, ) 外面定义的变量,是属于这个 class 的,并且由所有的 instance 共享的,而不是单属于某个instance; 在 __init__(self, ) 里面定义的变量,只属于这个 object instance (self) 本身。
  • 关于 __dict__:
    • 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的;对象的__dict__中存储了一些self.xxx的一些东西

试着跑一下:

if __name__ == '__main__':
  rm1 = Borg()
  rm2 = Borg()

  rm1.state = 'Idle'
  rm2.state = 'Running'

  print('rm1: {0}'.format(rm1))
  print('rm2: {0}'.format(rm2))

  rm2.state = 'Zombie'

  print('rm1: {0}'.format(rm1))
  print('rm2: {0}'.format(rm2))

  print('rm1 id: {0}'.format(id(rm1)))
  print('rm2 id: {0}'.format(id(rm2)))

  rm3 = YourBorg()

  print('rm1: {0}'.format(rm1))
  print('rm2: {0}'.format(rm2))
  print('rm3: {0}'.format(rm3))

其结果为:

### OUTPUT ###
# rm1: Running
# rm2: Running
# rm1: Zombie
# rm2: Zombie
# rm1 id: 140732837899224
# rm2 id: 140732837899296
# rm1: Init
# rm2: Init
# rm3: Init

本文代码来自: https://github.com/faif/python-patterns/blob/master/patterns/creational/borg.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python imgaug库安装与使用教程(图片加模糊光雨雪雾等特效)

    Python imgaug库安装与使用教程(图片加模糊光雨雪雾等特效)

    imgaug机器学习实验中的图像增强库,特别是卷积神经网络,支持以多种不同方式增强图像、关键点/地标、边界框、热图和分割图,这篇文章主要介绍了Python imgaug库 安装与使用教程(图片加模糊光雨雪雾等特效),需要的朋友可以参考下
    2022-11-11
  • Python编程进阶代码逻辑分离指南

    Python编程进阶代码逻辑分离指南

    在 Python 编程中,适当的代码逻辑分离可以帮助降低复杂度、提高可读性,减少大量的 if-else 结构,本文将深入探讨如何使用不同方法来改进代码结构,降低对 if-else 结构的依赖
    2023-12-12
  • Python学习笔记之os模块使用总结

    Python学习笔记之os模块使用总结

    这篇文章主要介绍了Python学习笔记之os模块使用总结,本文总结了多个常用方法,需要的朋友可以参考下
    2014-11-11
  • 一篇文章带你了解python集合基础

    一篇文章带你了解python集合基础

    今天小编就为大家分享一篇关于Python中的集合介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • Python简单实现图片转字符画的实例项目

    Python简单实现图片转字符画的实例项目

    这篇文章主要介绍了Python简单实现图片转字符画的实例项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 如何利用python多线程爬取天气网站图片并保存

    如何利用python多线程爬取天气网站图片并保存

    最近做个天 气方面的APP需要用到一些天气数据,所以下面这篇文章主要给大家介绍了关于如何利用python多线程爬取天气网站图片并保存的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • python基础教程之lambda表达式使用方法

    python基础教程之lambda表达式使用方法

    lambda表达式相当于函数体为单个return语句的普通函数的匿名函数,本文主要介绍lambda表达式使用方法
    2014-02-02
  • Python如何对齐字符串

    Python如何对齐字符串

    这篇文章主要介绍了Python如何对齐字符串,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • tensorflow 实现打印pb模型的所有节点

    tensorflow 实现打印pb模型的所有节点

    今天小编就为大家分享一篇tensorflow 实现打印pb模型的所有节点,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python函数命名空间,作用域LEGB及Global详析

    Python函数命名空间,作用域LEGB及Global详析

    这篇文章主要介绍了Python函数命名空间,作用域LEGB及Global详析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09

最新评论