gpt4 book ai didi

python - 如果 __new__ 在没有参数的情况下调用,为什么 __init__ 不会被调用

转载 作者:太空狗 更新时间:2023-10-29 21:16:16 26 4
gpt4 key购买 nike

我正在尝试创建(不完全是恢复)一个将其属性保存在数据库中的对象。因此,我不想调用 __init__。这种愿望似乎符合 Guido's intended use for __new__ .我不明白为什么 __init__ 没有被调用。

以下面的代码片段为例,它返回了类 User 的实例,而没有调用 __init__

class User(object):
def __init__(self, arg1, arg2):
raise Exception

user = User.__new__(User)

print user
<project.models.User object at 0x9e2dfac>

这正是我想要的行为。但是,我的问题是我不明白为什么?

根据python docs __init__ 应该在 __new__“返回 cls 的实例”时被调用。

那么为什么 __init__ 甚至没有被调用,即使 __new__ 返回一个类实例?

最佳答案

构造函数(User())负责调用分配器(User.__new__() ) 和 initializer (User.__init__()) 依次。由于永远不会调用构造函数,因此永远不会调用初始化程序。

关于python - 如果 __new__ 在没有参数的情况下调用,为什么 __init__ 不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com