资讯专栏INFORMATION COLUMN

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

Jinkey / 3206人阅读

摘要:关于类的静态函数类函数普通函数全局变量以及一些内置的属性都是放在类里的对象的中存储了一些的一些东西试着跑一下其结果为本文代码来自

有如下 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/pytho...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43952.html

相关文章

  • Python下的设计模式总结----创建型设计模式(一)

    摘要:最近在学习设计模式而开发的语言中比较中意的就是了在这里总结下设计模式一般分为三大类构造型结构型行为型先从创建型设计模式开始创建型设计模式包括单例模式抽象工厂模式工厂方法模式生成器模式惰性初始化模式对象池模式原型模式单例模式单例模式的定义是保 最近在学习设计模式,而开发的语言中比较中意的就是python了,在这里总结下. 设计模式一般分为三大类:构造型,结构型,行为型 先从创建型设计模式...

    lewif 评论0 收藏0
  • 又被面试官问设计模式了,我真的是

    摘要:面试官要不你来手写下单例模式呗候选者单例模式一般会有好几种写法候选者饿汉式简单懒汉式在方法声明时加锁双重检验加锁进阶懒汉式静态内部类优雅懒汉式枚举候选者所谓饿汉式指的就是还没被用到,就直接初始化了对象。面试官:我看你的简历写着熟悉常见的设计模式,要不你来简单聊聊你熟悉哪几个吧?候选者:常见的工厂模式、代理模式、模板方法模式、责任链模式、单例模式、包装设计模式、策略模式等都是有所了解的候选者:...

    不知名网友 评论0 收藏0
  • Python单例模式

    摘要:在中,我们可以用多种方法来实现单例模式使用模块使用使用装饰器使用元类使用模块其实,的模块就是天然的单例模式,因为模块在第一次导入时,会生成文件,当第二次导入时,就会直接加载文件,而不会再次执行模块代码。 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对...

    khlbat 评论0 收藏0
  • Python单例模式

    摘要:使用元类可以控制类的创建过程,它主要做三件事拦截类的创建修改类的定义返回修改后的类使用元类实现单例模式的代码如下执行结果 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 ...

    church 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0

发表评论

0条评论

Jinkey

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<