Changelog для Python 2.2 (где были введены классы нового стиля) говорит следующее о функции __new__
:Почему не __new__ в классах нового стиля Python метод класса?
__new__
статический метод, а не метод класса. Первоначально я думал, что это должен быть метод класса, и именно поэтому я добавил примитивclassmethod
. К сожалению, с помощью методов класса, upcalls не работают правильно в этом случае, поэтому я должен был сделать его статическим методом с явным классом в качестве его первого аргумента.
Однако я не могу придумать, почему методы класса не будут работать для этой цели, и это, безусловно, будет выглядеть лучше. Почему в конце концов метод __new__
оказался в качестве метода класса? О чем говорит Гвидо, когда он говорит, что «восстания в этом случае не работают»?
@ Duncan: Я намеренно использовал 'new', а не' __new__'. Если неясно, оставьте комментарий, я попытаюсь уточнить. – jfs
Я думаю, если бы вы использовали имя, которое было немного более отчетливым, чем просто отбрасывание подчеркиваний, это было бы яснее, но теперь я понимаю, спасибо. – Duncan
Когда это будет действительно проблема? Если вам нужен экземпляр 'subcls', почему бы вам не назвать' subcls.new() '? Выполнение этого так, как вы описываете, имеет эффект не запускать правильные '__new__' функции на' subcls'. – Dolda2000