资讯专栏INFORMATION COLUMN

python __new__ 和 __init__

qieangel2013 / 1071人阅读

摘要:概述和是类实例化的过程中被调用的方法,负责对象的创建,相当于构造器或者构造函数负责对象初始化。使用频率上,较多会被使用。而类似一般的实例方法,第一个参数是,表示实例。以上代码和经验仅在得到验证。

概述

newinit 是类实例化的过程中被调用的方法, new 负责对象的创建,相当于构造器或者构造函数; init 负责对象初始化。 使用频率上, init 较多会被使用。

class A(object):

    def __new__(cls):
        return object.__new__(cls)

    def __init__(self):
        self.instance_method()

    def instance_method(self):
        print "success!"

newA = A()
区别 参数

new 的第一个参数是 cls,表示类本身。

init 类似一般的实例方法, 第一个参数是 self,表示实例。我们可以看到 init 方法运行之前, 实例已经可以被使用了(self参数)。实例上的其他的方法也是可以使用的了。

调用时机

当我们创建类的对象时, new 先被调用,返回一个对象,对象引用作为参数传递给 init__, 然后对象属性被初始化。__init 方法不能返回任何数据。

__new__ --->(创建对象) --> __init__(self)
使用

只有很少的时候需要自己编写 new 方法,比如单例模式。大多数情况下,只需要关心实例的初始化,初始化过程中属性的分配,以及是否调用其他的实例方法。

以上代码和经验仅在 Python(2.7) 得到验证。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40928.html

相关文章

  • Python new 类方法 init 实例方法以及单例模式的简单讨论

    摘要:中的类都是单例模式一天,一同事问我这样一个问题。与方法属于新式类,即属于类。方法在实例被创建之后被调用,该方法仅仅是对方法创建的实例进行一些初始化操作。需要注意的是,在重写方法与方法的参数应该保持一致,否则会有发生。 Python 中的类都是单例模式? 一天,一同事问我这样一个问题。这是一个奇怪的问题,可能你也这么认为。这里先不做解释,我们先来看看 __new__ 和 __init__...

    FingerLiu 评论0 收藏0
  • python 关于 __new____init__ , cls, self 的碎碎念。

    摘要:本文旨在澄清里和的概念。的创建并返回的这个实例,是裸的。然后我们的的再接手这个裸的实例去进一步加工,比如加上各种,或再执行一些别的这个过程就是。如果用了,那么就可以无视这个,因为就可以理解成一个普通的函数表示这个类本身。 本文旨在澄清 python 里 __new__ vs __init__ 和 cls vs self 的概念。 很多初学者会困扰,python的魔法函数 __new_...

    _ipo 评论0 收藏0
  • python设计模式-单例模式

    摘要:实现实现单例模式有多种方案使用提供了非常易用的类,只要继承它,就会成为单例。参考链接单例模式最后,感谢女朋友支持。 问题:现代化的巧克力工厂具备计算机控制的巧克力锅炉。锅炉做的事情就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制成巧克力棒。下边是一个巧克力公司锅炉控制器的代码,仔细观察一下,这段代码有什么问题? class ChocolateBoiler(object): ...

    darkbug 评论0 收藏0
  • python中的魔术方法__

    摘要:在任何新式类的方法,不能调用自身的来制造实例,因为这会造成死循环。因此必须避免类似以下的写法在中避免或。注意如果没有返回即当前类的实例,那么当前类的方法是不会被调用的。是最基本的用于比较的魔术方法。 1、__ new__, __ init__, __ call__ __ new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个...

    SegmentFault 评论0 收藏0
  • 这几道Python面试题,稳准狠,Python面试题No15

    摘要:必须放一个表情包,太魔性了第题修改以下代码,使得下面的代码调用类的方法原始代码基础方法衍生方法面试要点类继承,只要通过方法指定类对象就可以了。必须放一个表情包,太魔性了! showImg(https://user-gold-cdn.xitu.io/2019/5/23/16ae22b8813bdd82); 第1题: 修改以下Python代码,使得下面的代码调用类A的show方法); 原始代码 ...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<