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