Что является примером использования __new__
в Python таким образом, что в теле __new__
вы сделать не вернуть результат вызова какой-либо другой (основание, мета- или иначе) версию класса по __new__
, но вы сделать возвращающих выделенный экземпляр предполагаемого класса, так что будет вызван __init__
?Python __new__ без вызова другой версии класса __new__?
Я предполагаю, что это (и должно быть) очень редко, но мне любопытно, есть ли пример этого прецедента. Я попытался найти источник Python для реализации tuple
__new__
, а также для реализации type
, но это не похоже на то, что это быстро и легко найти в Интернете.
Что вы подразумеваете под «выделенным экземпляром»? Есть такие вещи, как [Singleton] (http://stackoverflow.com/a/1810367/1427416), которые используют '__new__' для возврата существующего экземпляра того же класса, но' __new__' по-прежнему используется для построения исходного экземпляра , и повторное вызов '__init__', возможно, даже не желательно там (хотя это происходит в этом примере). Невозможно создать реальный новый экземпляр пользовательского класса без использования встроенного 'object .__ new__' в какой-то момент. 'tuple' и' type' реализованы в C, поэтому они не используют один и тот же API с '__new__'. – BrenBarn
Под «выделенным экземпляром» я имею в виду только то, что возвращает '__new__'. Как вы делаете новые экземпляры вещей, не опускаясь на что-то еще '__new__'? Или это ошибочный вопрос? – ely
Вы не можете. Вы должны либо вызвать что-то еще '__new__', либо просто создать объект, вызвав некоторый другой класс/тип, который под капотом вызовет этот класс' __new__'. – BrenBarn