zoukankan      html  css  js  c++  java
  • __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__方法能够安全的同一个实例进行多次调用。
     
  • 相关阅读:
    VSFTP配置参数详解
    C语言---函数
    ios 学习计划
    读书笔记---金融学一<新国富论>
    读书笔记---人生规划一<斯坦福最受欢迎的人生规划课、像卡耐基一样经营人生、九型人格>
    网络基础
    swift中构造方法和Kvc
    swift中的懒加载
    private的用法
    extension
  • 原文地址:https://www.cnblogs.com/yangxiaolan/p/6021034.html
Copyright © 2011-2022 走看看