Автор Тема: Чем отличается __init__ от __new__?  (Прочитано 18593 раз)

DigitalMag

  • Юный джедай
  • **
  • Сообщений: 89
  • Репутация +6/-0
    • Просмотр профиля
Чем отличается __init__ от __new__?
« : Февраля 16, 2019, 12:14:34 pm »
Чем отличается __init__ от __new__?

Вроде и то, и то происходит при инициализации объекта, но __new__ вроде до __init__? В чем смысл?

AdminUser

  • Team Lead
  • Юный джедай
  • *****
  • Сообщений: 65
  • Репутация +8/-0
    • Просмотр профиля
Re: Чем отличается __init__ от __new__?
« Ответ #1 : Февраля 24, 2019, 03:17:43 pm »
Метод __new__ вызывается до __init__, принимает в качестве параметра класс и  должно вернуть экземпляр класса. Классическое использование:

class C(object):

    def __init__(self):
        print type(self)

    def __new__(cls, *args, **kwargs):
        obj = super(C, cls).__new__(cls)
        print "sdfsfs"
        return obj