ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

类的共享属性

2021-04-10 22:33:53  阅读:164  来源: 互联网

标签:__ b1 b2 b3 共享 属性 id cls


#_*_ encoding: utf-8 _*_   @author: ty  hery   2019/9/6
# 共享属性:创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.
class Borg(object):
    _state = {}
    def __new__(cls, *args, **kw):
        ob = super(Borg, cls).__new__(cls, *args, **kw)
        ob.__dict__ = cls._state
        return ob
class MyClass2(Borg):
    a = 1
b1 = MyClass2()
b2 = MyClass2()
b3 = MyClass2()
b1.a='萨菲的'
b2.a='萨菲02'
b1.a='萨菲03'
MyClass2.a = 333
print(id(b1),id(b2),id(b3))
print(b1.a,b2.a,b3.a)
输出:
42770952 42771008 42770616
萨菲03 萨菲03 萨菲03
167529720 167529720 167529720
# 装饰器版本
def singleton(cls, *args, **kw):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls(*args, **kw)
        return instances[cls]
    return getinstance

@singleton
class MyClass:
    a = 1
    
b1 = MyClass()
b2 = MyClass()
b3 = MyClass()
b1.a= 11
b2.a= 12
b3.a= 13

print(id(b1),id(b2),id(b3))
print(b1.a,b2.a,b3.a)
输出:42516376 42516376 42516376
13 13 13

标签:__,b1,b2,b3,共享,属性,id,cls
来源: https://www.cnblogs.com/heris/p/14642346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有