zoukankan      html  css  js  c++  java
  • python 中的__new__方法

    1.有关__new__方法的介绍

    __new__方法调用在构造方法构造实例之前,即在__init__方法执行之前,我们可以这样理解,他的作用是决定是否适用这个__iint__方法来构造实例,但是需要注意,__new__只出现在新式类中,在经典类中没有这个方法.本质上__new__是一个静态方法.

    2.有关__new__的使用

    上面我们介绍__new__方法,下面我们来看一下他是如何使用的

    class User(object):
        def __init__(self,name):
            self.name = name
            print("__init__方法被调用")
    
        @staticmethod
        def __new__(cls, *args, **kwargs):
            print("__new__方法被调用")
            return object.__new__(cls)
    
    if __name__ == '__main__':
        u1 = User("name")

    上面代码的执行结果如下:

    通过上面的结果我们可以知道,__new__方法执行在__init__方法之前

    我们在来解释下他的用法:

    1)__new__方法必须有参数cls,cls指的是当前正在实例化的类

    2)__new__必须有返回值,返回的是实例,如果是使用当前类构造的实例,可以用object.__new__(cls),也可以用父类名.__new__(cls)

    3)__init__方法的参数self其实就是__new__方法返回的实例对象,在这个__init__方法中还可以对这个实例进行其他的操作,比如添加一些属性等

    注:实际上在新式类中我们不是必须要重写这个__new__方法,python是默认调用这个类的直接父类的__new__方法来构造实例的

    通常这个__new__方法用在单例模式的实现上

     
    人生没有白走的路,每一步都算数 恐惧是万恶之源
  • 相关阅读:
    golang中os/user包用法
    golang中os包用法
    与table有关的布局
    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version
    canvas里调用getImageData的报security的问题
    CSS样式覆盖规则
    windows7文件夹怎样默认图片大图显示?
    Jboss,Tomcat 远程调试配置
    IE(IE6/IE7/IE8)支持HTML5标签
    JS 继承(类式 与 原型式)
  • 原文地址:https://www.cnblogs.com/niusha/p/10618493.html
Copyright © 2011-2022 走看看