python: 从__new__返回值

0 投票
1 回答
1356 浏览
提问于 2025-04-16 03:34

编辑

其实我调用了 object.__new__(cls),我没意识到这样做就创建了一个 cls 类的对象!谢谢你提醒我这一点。

原问题

文档上说:

如果 new() 没有返回 cls 的实例,那么新实例的 init() 方法就不会被调用。

但是,当我从 cls.__new__() 返回 object.__new__() 时,__init__() 还是被调用了。我不认为 object 的实例算是 cls 的实例。我到底漏掉了什么呢?

1 个回答

4

无法重现你的观察结果:

>>> class cls(object):
...   def __new__(cls):
...     return object.__new__(object)
...   def __init__(self):
...     print 'in __init__'
... 
>>> x = cls()
>>> 

正如你所看到的,cls.__init__ 并没有被执行。

你是怎么调用 object.__new__ 的?顺便问一下,你为什么要这么做呢?

撰写回答