__new__,__init__

继承自object的新式类才有new
new至少要有一个参数cls,代表要实例化的类,new方法负责创建一个实例对象,在对象被创建的时候调用该方法它是一个类方法。new方法在返回一个实例之后,会自动的调用init方法,对实例进行初始化。如果new方法不返回值,或者返回的不是实例,那么它就不会自动的去调用init方法。此参数在实例化时由Python解释器自动提供

new必须要有返回值,返回实例化出来的实例,这点在自己实现new时要特别注意,可以return父类new出来的实例,或者直接是object的new出来的实例

init有一个参数self,就是这个new返回的实例,initnew的基础上可以完成一些其它初始化的动作,init不需要返回值

new没有正确返回当前类cls的实例,那init是不会被调用的,即使是父类的实例也不行

举个例子、继承list

class MyList(list):
    def __init__(self):
        print 'inti'
    def __new__(cls,*args, **kwargs):
        print "new %s"%cls
        return list.__new__(cls, *args, **kwargs)
    def __call__(self, *arg):
        print arg
a = MyList()
print a('xxx')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,856评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 注:__new__在创建对象时调用,返回当前对象的一个实例。第一个参数是cls即class本身。__init__在...
    何幻阅读 598评论 0 0
  • 转自:http://blog.csdn.net/liangliang103377/article/details/...
    reallychao阅读 2,462评论 1 20