2010-09-01 140 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