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) 。

  • 相关阅读:
    python 编码格式
    mysql 允许特定IP访问
    mysql “Too many connections” 解决办法
    python 微信支付
    python RSA 加密与签名
    给列表里添加字典时被最后一个覆盖
    设置MySQL允许外网访问
    Python中print/format字符串格式化实例
    ssh 将22端口换为其它 防火墙设置
    linux ubuntu nethogs安装与介绍
  • 原文地址:https://www.cnblogs.com/babyjoy/p/9274782.html
Copyright © 2011-2022 走看看