我居然叫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