@
tonychow 谢谢,我是在
http://www.jianshu.com/p/f63ad9d550f1 这篇文章中看到对于常规类的实例化步骤描述为大致等同如下:
def __call__(obj_type, *args, **kwargs):
obj = obj_type.__new__(*args, **kwargs)
if obj is not None and issubclass(obj, obj_type):
obj.__init__(*args, **kwargs)
return obj
__new__方法为对象分配了内存空间,构建它为一个“空"对象然后__init__方法被调用来初始化它。总的来说:
Foo(*args, **kwargs)等价于 Foo.__call__(*args, **kwargs)
既然 Foo 是一个 type 的实例,Foo.__call__(*args, **kwargs)实际调用的是 type.__call__(Foo, *args, **kwargs)
type.__call__(Foo, *args, **kwargs)调用 type.__new__(Foo, *args, **kwargs),然后返回一个对象。
obj 随后通过调用 obj.__init__(*args, **kwargs)被初始化。
obj 被返回。
我帖子所提的问题也是这个网址在文章末尾提出的关注点,我就是不明白要怎么理解