[深入Python]__new__和__init__
2015-05-01 00:00
363 查看
class
A(
object
):
def
__init__(
self
):
"init"
def
__new__(
cls
,
*
args,
*
*
kwargs):
"new %s"
%
cls
return
object
.__new__(
cls
,
*
args,
*
*
kwargs)
A()
输出:
new <class '__main__.A'>
init
知识点:
继承自object的新式类才有__new__
__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行
class
A(
object
):
pass
class
B(A):
def
__init__(
self
):
"init"
def
__new__(
cls
,
*
args,
*
*
kwargs):
"new %s"
%
cls
return
object
.__new__(A,
*
args,
*
*
kwargs)
b
=
B()
type
(b)
输出:
new <class '__main__.B'>
<class '__main__.A'>
详细解释可参考:
http://www.cnblogs.com/ifantastic/p/3175735.html
相关文章推荐
- [深入Python]__new__和__init__
- [深入Python]__new__和__init__
- 一个案例深入Python中的__new__和__init__
- 一个案例深入Python中的__new__和__init__
- 深入理解Python中的 __new__ 和 __init__及区别介绍
- [深入Python]__new__和__init__
- [深入Python]__new__和__init__
- [深入Python]__new__和__init__
- Python 辨异 —— __init__ 与 __new__
- 深入Python(2): __init__.py 用法
- Python __new__, __init__, __metaclass__, __call__, __del__, __getattr__, __getattribute__
- Python基础(十) __init__与__new__区别
- Python中__init__和__new__的区别详解
- python __new__ __init__
- Python__new__和__init__
- 34 Python __new__与__init__区别
- 【原创】Python 对象创建过程中元类, __new__, __call__, __init__ 的处理
- 详解Python中的__new__、__init__、__call__三个特殊方法
- Python语言学习讲解十八: __new__、__init__、__call__之详解
- Python的__new__与__init__区别