• __new__静态方法


     __new__静态方法
    新式类都有一个__new__的静态方法,它的原型是object.__new__(cls[, ...])
    cls是一个类对象,当你调用C(*args, **kargs)来创建一个类C的实例时,python的内部调用是
    C.__new__(C, *args, **kargs),然后返回值是类C的实例c,在确认
    c是C的实例后,python再调用C.__init__(c, *args, **kargs)来初始化实例c。
    所以调用一个实例c = C(2),实际执行的代码为:
    c = C.__new__(C, 2)
    if isinstance(c, C):
        C.__init__(c, 23)#__init__第一个参数要为实例对象
    object.__new__()创建的是一个新的,没有经过初始化的实例。当你重写__new__方法时,可以不
    用使用装饰符@staticmethod指明它是静态函数,解释器会自动判断这个方法为静态方法。如果
    需要重新绑定C.__new__方法时,只要在类外面执行C.__new__ = staticmethod(yourfunc)就可以了。
     
    可以使用__new__来实现Singleton单例模式:
    class Singleton(object):
        _singletons = {}
        def __new__(cls):
            if not cls._singletons.get(cls):            #若还没有任何实例
                cls._singletons[cls] = object.__new__(cls)  #生成一个实例
            return cls._singletons[cls]                             #返回这个实例
    运行结果如下:
     
    使用id()操作,可以看到两个实例指向同一个内存地址。Singleton的所有子类也有这一
    特性,只有一个实例对象,如果它的子类定义了__init__()方法,那么必须保证它的
    __init__方法能够安全的同一个实例进行多次调用。
     
  • 相关阅读:
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    以太坊:通信协议对象 shh
    以太坊:Truffle 概述
    以太坊:快速入门 Truffle
  • 原文地址:https://www.cnblogs.com/yangxiaolan/p/6021034.html
Copyright © 2020-2023  润新知