我居然叫object.__new__(cls)
,我并没有意识到,这个我建类CLS的对象!感谢您向我指出这一点。
原来的问题
文档说
如果新()不返回CLS的 实例,则新 实例的初始化()方法不会 被调用。
然而,当我返回从cls.__new__()
object.__new__()
,该__init__()
仍在调用。我不会将一个对象的实例视为cls的一个实例。我错过了什么?
我居然叫object.__new__(cls)
,我并没有意识到,这个我建类CLS的对象!感谢您向我指出这一点。
原来的问题
文档说
如果新()不返回CLS的 实例,则新 实例的初始化()方法不会 被调用。
然而,当我返回从cls.__new__()
object.__new__()
,该__init__()
仍在调用。我不会将一个对象的实例视为cls的一个实例。我错过了什么?
无法重现你的观察:
>>> class cls(object):
... def __new__(cls):
... return object.__new__(object)
... def __init__(self):
... print 'in __init__'
...
>>> x = cls()
>>>
正如你看到的,cls.__init__
没有执行。
如何是你叫object.__new__
(并且,顺便说一句,为什么你是 - ?)。
对不起,我的错误:(你是对的.. 什么是正确的做法?我应该删除问题? – max 2010-09-01 06:28:07
我正在使用__new__来实现枚举器(请参阅我的这个问题:http://stackoverflow.com/questions/3588996/python-enumeration-class-for-orm-purposes) – max 2010-09-01 06:44:11
@max,只是澄清,通过编辑你的问题重新调用'object .__ new __(cls)' - ** cls'参数创建一个'cls'实例,这就是为什么'cls .__ init__'然后调用它的原因。 – 2010-09-01 14:23:49
虽然我不认为我可以删除它..至少在我upvoted答案后.. – max 2010-09-01 06:45:52