关于为什么python __init__在创建对象后并不总是调用的问题有很多问题.当然,答案可以在文档的摘录中找到:
如果
__new__()返回一个实例cls,那么__init__()将调用新实例的方法__init__(self[, ...]),其中self是新实例,其余参数与传递给它的相同__new__().如果
__new__()没有返回实例cls,则__init__()不会调用新实例的方法.
这个的设计原因是什么?
__init__确实像一个构造函数。它需要一个实例来完成其工作,例如设置属性等。如果__new__不显式返回则返回实例,则None默认返回。
__init__想象一下,当获取 aNone作为输入并尝试设置属性时会发生什么?它会引发一个名为的异常"AttributeError: 'NoneType' object has no attribute xxxxx".
__init__所以我认为当返回 None 时不调用是很自然的__new__。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |