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

标签 python

我正在尝试创建(不完全是恢复)一个将其属性保存在数据库中的对象。因此,我不想调用 __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/

相关文章:

python - cupsfilter 不适用于 Python subprocess.call()

Python从文本文件列表中删除目录中的文件

Python谷歌应用引擎灵活

python - 最有效的方法是从文本文档中获取 "nibble"第一行文本,然后将其重新保存在 python 中

python - 从 python 调用休眠命令

python - 过滤 Pandas 数据框和覆盖不会改变数据框

coding-style - 有没有办法在不引入不必要的变量的情况下迭代指定次数?

python - 按一列对 numpy 数组 block 进行排序的有效方法是什么?

python - 查看文件是否存在并打印

python - 筛选比较,计算相似度得分,python