Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3652501
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2019-03-06 13:45:58

那么怎么能够让类只创建一个实例,而后再创建的实例是返回上一次的对象的引用呢?
我们了解到,python中,一个类创建对象实例是通过调用父类object的 __new__(cls)方法来创建对象的
我们可以通过重写 __new__(cls)方法去实现类只创建一个实例
代码如下:
    class Earth(object):
        __instance=None #定义一个类属性做判断
     
        def __new__(cls):
     
            if cls.__instance==None:
                #如果__instance为空证明是第一次创建实例
                #通过父类的__new__(cls)创建实例
                cls.__instance==object.__new__(cls)
                return  cls.__instance
            else:
                #返回上一个对象的引用
                return cls.__instance
     
    a = Earth()
    print(id(a))
    b = Earth()
    print(id(b))
---------------------
 作为Python模块时是天然的单例模式  #创建一个sington.py文件,
内容如下 class Singleton(object):    
def foo(self):       
pass     
mysington = Singleton()  # 运用 from sington import mysington
mysington.foo()
1 >>> #普通模式  2 ... class A(object):  3 ... def __init__(self,name,male):  4 ...         self.name = name  5 ...         self.name = male  6 ...  7 >>> #实例化多个对象  8 ... obj1 = A('ben','boy')  9 >>> obj2 = A('min','girl')  10 >>> obj3 = A('miao','boy')  11 >>> ##打印内存地址,可以看到内存地址都是不一样的  12 ... print id(obj1),id(obj2),id(obj3)  13 140230687882448 140230687882512 140230687882576  14 >>>  15 >>> #单例模式  16 ... class A(object): 17 ... __instance = None  18 ... def __init__(self,name,male):  19 ...         self.name = name  20 ...         self.name = male 21 ...     @staticmethod  22 ... def create_obj():  23 ... if not A.__instance:  24 ...             A.__instance = A('ben','boy') 25 ... return A.__instance  26 ... else:  27 ... return A.__instance 28 ...  29 >>> #单例模式实例化多个对象  30 ... obj1 = A.create_obj()  31 >>> obj2 = A.create_obj()  32 >>> obj3 = A.create_obj()  33 >>> ##打印内存地址,可以看到内存地址都是一样的 34 ... print id(obj1),id(obj2),id(obj3)  35 140230687882832 140230687882832 140230687882832  36 >>> 

阅读(1522) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~