2010-09-01 3 views
1

EDITпитон: возвращаемое значение из __new__

Я на самом деле называется object.__new__(cls), и я не понимал, что это я построил объект класса ЦБС! Спасибо, что указали это мне.

ORIGINAL ВОПРОС

документация говорит

Если метод новый() не возвращает экземпляр ЦБС, затем инициализации нового экземпляра() не будет вызывается.

Однако, когда я вернусь object.__new__() из cls.__new__(), то __init__() еще употребляется. Я бы не рассматривал экземпляр объекта для квалификации как экземпляр cls. Что мне не хватает?

+0

Не думаю, что я могу удалить его, хотя .. По крайней мере, не после того, как я подтвердил ответ. – max

ответ

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

+0

Я использую __new__ для реализации перечислителя (см. Этот мой вопрос: http://stackoverflow.com/questions/3588996/python-enumeration-class-for-orm-purposes) – max

+0

@max, просто уточните, re вызов 'object .__ new __ (cls)' путем редактирования вашего вопроса - **, что ** 'cls' аргумент делает экземпляр' cls', поэтому 'cls .__ init__' затем вызывается на него, как и должно быть. –

Смежные вопросы