用过python写过面向对象的代码的人对__init__方法应该很熟悉了,__init__ 方法一般用在初始化一个类实例的时候.python
例如:spa
# -*- coding: utf-8 -*- ''' Created on Mar 31, 2016 @author: fky ''' class Test(object): def __init__(self,name): self.name = name def __str__(self,): return '<Test: %s>' % self.name if __name__ == '__main__': test = Test('test1') print(test)
结果:code
<Test: test1>
这就是__init__普通用法,其实当实例化一个类最早被调用的方法 __new__ 方法。orm
class Test(object): def __new__(self,name): print('__new__') return super().__new__(self) def __init__(self,name): print('__init__') self.name = name def __str__(self,): return '<Test: %s>' % self.name if __name__ == '__main__': test = Test('test1') print(test)
结果:对象
__new__ __init__ <Test: test1>
从这个运行结果能够看到__new__方法的调用是发生在__init__以前的。继承
__new__ 的做用utf-8
依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(好比int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。文档