zoukankan      html  css  js  c++  java
  • __init__,__new__,__call__三个特殊方法

    __new__: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self) 

          其必须要有返回值,返回实例化出来的实例,需要注意的是,可以return父类__new__()出来的实例,也可以直接将object的__new__()出来的实例返回。

         __new__方法在类定义中不是必须写的,如果没定义,默认会调用object.__new__去创建一个对象。如果定义了,就是会覆盖,使用自定义的,这样就可以自定制创建对象的行为。

     单例模式也可以通过这种方式来创建。


    __init__ : 对象的初始化, 是一个实例方法,第一个参数是self,该self参数就是__new__()返回的实例,__init__()在__new__()的基础上可以完成一些其它初始化的动作,__init__()不需要返回值。

    __init__ 方法通常用在初始化一个类实例的时候,但__init__其实不是实例化一个类的时候第一个被调用 的方法。当使用 Persion(name, age) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 __new__ 方法。从打印结果就可以看出来

      若__new__()没有正确返回当前类cls的实例,那__init__()将不会被调用,即使是父类的实例也不行。


    __call__ : 对象可call,注意不是类,是对象。

    对象通过提供__call__(slef, *args ,**kwargs)方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2) 。

  • 相关阅读:
    局部变量、结构体和main函数
    类、对象和方法
    Archiver 浅析
    NSArry的常见方法
    iOS 键盘隐藏
    //获取拼音首字母
    UI通过UISlider编写游戏第六感
    UI中各种手势的使用点击,捏合,清扫,旋转,平移,边缘移动,长按
    IOS学习笔记 -- Modal和Quartz2D
    多控制器管理练习 -- 私人通讯录
  • 原文地址:https://www.cnblogs.com/babyjoy/p/9274782.html
Copyright © 2011-2022 走看看