V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  saximi  ›  全部回复第 11 页 / 共 11 页
回复总数  201
1 ... 2  3  4  5  6  7  8  9  10  11  
2017-07-05 19:42:20 +08:00
回复了 saximi 创建的主题 Python 关于类实例化的问题
@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 被返回。


我帖子所提的问题也是这个网址在文章末尾提出的关注点,我就是不明白要怎么理解
1 ... 2  3  4  5  6  7  8  9  10  11  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1355 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 16:58 · PVG 00:58 · LAX 09:58 · JFK 12:58
Developed with CodeLauncher
♥ Do have faith in what you're doing.