MisterCat
@MisterCat
Начинаю программировать.

Зачем возвращать ссылку на метод __new__ базового класса?

Здравствуйте. Если super().__new__(cls) возвращает ссылку на экземпляр класса, то как происходит создание экземпляра класса. И если super().__new__(cls) это и создаёт, то зачем возвращать ссылку на экземпляр класса?
class Point:
    def __new__(cls, *args, **kwargs): 
        print('Вызов __new__  ' + str(cls))
        return super().__new__(cls)

    def __init__(self, x, y): 
        print('Вызов функции __init__ ' + str(self))
        self.x = x
        self.y = y


pt = Point(1, 2)
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Здравствуйте. Если super().__new__(cls) возвращает ссылку на экземпляр класса, то как происходит создание экземпляра класса

Для начала - нужно обозначить несколько моментов.
Во-первых, все классы скрыто наследуются от базовой структуры Object.
(В 3.х версиях это не очень очевидно, но 2.х во многих случаях следовало явно наследоваться)
Функция super() обращается к классу-родителю и может вызывать его методы.
Собственно, поэтому этот кусок кода
def __new__(cls, *args, **kwargs): 
        print('Вызов __new__  ' + str(cls))
        return super().__new__(cls)

можно описать как:
При создании экземпляра класса следует вывести текст после чего выполнить описанный в Object метод, создающий экземпляр класса и вернуть ссылку на него

то зачем возвращать ссылку на экземпляр класса?

Если метод, создающий экземпляр класса, не возвращает ссылку на него, зачем он нужен и как с таким классом взаимодействовать?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы