2010-09-01 104 views
1

编辑蟒蛇:返回值从__new__

我居然叫object.__new__(cls),我并没有意识到,这个我建类CLS的对象!感谢您向我指出这一点。

原来的问题

文档说

如果()不返回CLS的 实例,则新 实例的初始化()方法不会 被调用。

然而,当我返回从cls.__new__()object.__new__(),该__init__()仍在调用。我不会将一个对象的实例视为cls的一个实例。我错过了什么?

+0

虽然我不认为我可以删除它..至少在我upvoted答案后.. – max 2010-09-01 06:45:52

回答

3

无法重现你的观察:

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

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

如何你叫object.__new__(并且,顺便说一句,为什么你是 - ?)。

+0

对不起,我的错误:(你是对的.. 什么是正确的做法?我应该删除问题? – max 2010-09-01 06:28:07

+0

我正在使用__new__来实现枚举器(请参阅我的这个问题:http://stackoverflow.com/questions/3588996/python-enumeration-class-for-orm-purposes) – max 2010-09-01 06:44:11

+0

@max,只是澄清,通过编辑你的问题重新调用'object .__ new __(cls)' - ** cls'参数创建一个'cls'实例,这就是为什么'cls .__ init__'然后调用它的原因。 – 2010-09-01 14:23:49