Python 如果在没有参数的情况下调用了uuu new uuuuuu,为什么不调用uuu init uuuu
我正在尝试创建(不是完全还原)一个属性保存在数据库中的对象。因此,我不想调用Python 如果在没有参数的情况下调用了uuu new uuuuuu,为什么不调用uuu init uuuu,python,Python,我正在尝试创建(不是完全还原)一个属性保存在数据库中的对象。因此,我不想调用\uuuu init\uuu。这一愿望似乎与我们的愿望是一致的。我不明白为什么\uuuuu init\uuuu没有被调用 以下面的代码段为例,它返回类User的实例,而不调用\uuuu init\uuuu class User(object): def __init__(self, arg1, arg2): raise Exception user = User.__new__(User) p
\uuuu init\uuu
。这一愿望似乎与我们的愿望是一致的。我不明白为什么\uuuuu init\uuuu
没有被调用
以下面的代码段为例,它返回类User的实例,而不调用\uuuu init\uuuu
class User(object):
def __init__(self, arg1, arg2):
raise Exception
user = User.__new__(User)
print user
<project.models.User object at 0x9e2dfac>
类用户(对象):
定义初始化(self,arg1,arg2):
引发异常
用户=用户。新用户(用户)
打印用户
这正是我想要的行为。然而,我的问题是,我不明白为什么
根据\uuuu init\uuuu
在\uuuu new\uuuuu
返回cls实例时应该调用
那么,为什么即使
\uuuuuuuuuuuuuuuuuuuuuuuuu
返回一个类实例,也没有调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>。构造函数(用户()
)负责依次调用分配器(用户。因为您通过直接调用\uuuu new\uuu
绕过了通常的构造机制。\uuuu init\uuuuuuu
-after-\uuuu new\uuuuuuu
逻辑是类型的。调用
(在CPython中,请查看类型对象.c
,类型调用函数),因此只有在执行用户(…)
时才会发生这种情况,请发布实际运行的代码。你是说def\uuuu init\uuuuu
?我遇到了同样的事情,并且发现python没有做到这一点。但是,文档明确指出“如果uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这是一个文档错误还是我误解了它?@UsAaR33你误解了它。调用SomeClass(args)
将(通常)执行instance=SomeClass.\uuuu new\uuuuuu(SomeClass,args)
,然后调用instance.\uuuuu init\uuuuuuu(args)
如果instance
是SomeClass
的实例。文档在该序列的上下文中讨论的是\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,而不是在调用它的任何时候,因为直接调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu。