python中的__init__ 、__new__、__call__小结

时间:2021-07-19 20:10:38 

1.__new__(cls, *args, **kwargs)  创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身
2.__init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】
3.__call__(self,  *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
 

看具体的例子:


class O(object):

    def __init__(self, *args, **kwargs):
        print "init"
        super(O, self).__init__(*args, **kwargs)

    def __new__(cls, *args, **kwargs):
        print "new", cls
        return super(O, cls).__new__(cls, *args, **kwargs)

    def __call__(self,  *args, **kwargs):
        print "call"
      

    oo = O()
    print "________"
    oo() 

打印出来的是:


new
init
________
call


比如:Python Singleton(单例模式)实现,那我们是不是只是重载一些__new__方法就可以了


class Singleton1(object):
    """ 重载new方法"""
    def __new__(cls, *args, **kwargs):
        if not "_instance" in vars(cls):
            cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
        return cls._instance


可不可以重载__init__方法呢?明显不可以,因为__init__之前调用了__new__方法,这时候已经生成了一个对象了,没办法实现单例模式

标签:python,init,new,call
0
投稿

猜你喜欢

  • PHP实现加减乘除最简单的实例分享

    2023-06-14 16:17:41
  • 很有创意的鼠标指针风筝

    2007-09-22 09:24:00
  • Python连接mysql数据库及简单增删改查操作示例代码

    2022-03-10 18:01:57
  • 心理模型

    2009-05-17 13:45:00
  • python数据结构之面向对象

    2021-04-09 08:02:06
  • python+adb+monkey实现Rom稳定性测试详解

    2023-02-06 07:46:00
  • Python装饰器的练习题

    2023-12-07 13:11:48
  • jsSmarty Project

    2009-10-19 23:14:00
  • 关于浮动的前世今生

    2009-08-19 18:51:00
  • python中迭代器(iterator)用法实例分析

    2023-12-16 05:32:51
  • 几种修复ACCESS数据库的实用方法

    2008-11-20 17:37:00
  • asp中获取当前页面的地址与参数的函数代码

    2011-02-20 10:37:00
  • Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器

    2007-09-23 12:43:00
  • Python Flask前端自动登录功能实现详解

    2021-12-13 17:36:17
  • Bottle框架中的装饰器类和描述符应用详解

    2023-10-10 00:18:25
  • 设计"以人为本"和"绿色设计"

    2008-10-07 12:21:00
  • python中plot实现即时数据动态显示方法

    2021-04-20 22:09:18
  • asp利用aspjpeg给图片生成PNG透明水印

    2009-03-20 14:01:00
  • Python matplotlib绘制散点图配置(万能模板案例)

    2023-08-02 23:04:18
  • 基于Python制作短信发送程序

    2022-06-19 16:47:25
  • asp之家 网络编程 m.aspxhome.com