PYTHON MAGIC METHODS. __INIT__ и __NEW__

  Рет қаралды 5,828

luchanos

luchanos

2 жыл бұрын

Всем привет! Продолжаю тему магических методов в Python. На очереди методы _init_ и __new__.
Поддержать:
/ luchanos
/ @luchanos
#ityoutubers #ityoutubersru

Пікірлер: 31
@user-qu7em2zr9k
@user-qu7em2zr9k 2 ай бұрын
спасибо
@vladimirkulakov6126
@vladimirkulakov6126 2 жыл бұрын
Понятно и доходчиво, спасибо тебе! Работай над курсом!
@luchanos
@luchanos 2 жыл бұрын
Спасибо большое!) Я уже)
@Army_of_Earth
@Army_of_Earth 2 жыл бұрын
О данных конструкторах знал, но не знал, что в ___new___ аллоцируется память. Спасибо! Это не относится прямо к теме ролика, но добавлю, что в отличие от "магического" *this* в других языках, *self* - это просто переменная, в которую передается ссылка на экземпляр. Например, название можно изменить на любое другое, а поведение не изменится. Менять название, разумеется, нет смысла, но понимать природу первого параметра метода, уверен, не помешает.
@luchanos
@luchanos 2 жыл бұрын
Всё верно! Аналогичная картина с переменной cls в классметодах)
@leoapril
@leoapril Жыл бұрын
Очень круто, смотрел в другом месте эту тему , но там автор все-таки уже забыл, каково быть полным новичком и не так понятно было. Спасибо большое!
@user-fd8gy7di6o
@user-fd8gy7di6o Жыл бұрын
Большое спасибо за видео! Только у вас понял в чем суть работы __new__
@alpachina1
@alpachina1 2 жыл бұрын
Благодарю, все понятно!
@empty9228
@empty9228 2 жыл бұрын
Николай, спасибо! У тебя хорошая подача материала)
@lekerrka
@lekerrka Жыл бұрын
Все очень понятно и грамотно описано, до сердечка достучаться удалось ❤️
@pavelkalinin1119
@pavelkalinin1119 Жыл бұрын
Думаю, было бы еще глубже, если бы показать, как создать "болванку" - сиречь экземпляр, какого ни будь другого класса, определенного выше. Например, яйцо создает либо курицу, либо питуха: from random import randint class Chicken: pass class Cock: pass class Egg: def __new__(cls, *args, **kwargs): return super().__new__(Chicken) if randint(1,10) % 2 else super().__new__(Cock) print(Egg()) print(Egg()) print(Egg()) print(Egg())
@NICKstyle
@NICKstyle Жыл бұрын
Всё подробно и понятно. Респект)
@gopherDooshit1
@gopherDooshit1 Жыл бұрын
вот реально иногда нужно, чтобы преподаватель не за 2 минуты пробежал тему __new__ , а размазал тонким слоем на 15 минут. Спасибо вам больше, наконец стал лучше понимать
@luchanos
@luchanos Жыл бұрын
всегда рад))
@romanbush5164
@romanbush5164 2 жыл бұрын
Класс не знал про New
@user-nu8cq5to6z
@user-nu8cq5to6z 2 жыл бұрын
Добрый вечер. Все понятно описано. Тем кто никогда не сталкивался с ООП прям топчик. Про метод __new__ не знал, закину в копилочку)
@luchanos
@luchanos 2 жыл бұрын
спасибо!)
@user-sz1we2hc2r
@user-sz1we2hc2r 2 жыл бұрын
Спасибо, спустя 2 дня я выкупил прикол этого маг. метода
@djangodev3191
@djangodev3191 2 жыл бұрын
Лайк
@andreykuskov8807
@andreykuskov8807 2 жыл бұрын
Спасибо, но я бы еще добавил про __dict__, тогда бы, возможно, у зрителя сложилась бы лучше картина по отличиям между инстансом и классом. Либо даже отдельно было бы неплохо рассказать про неймспейсы. class Program: language = 'Python' def say_hello(): print(f'Hello from {Program.language}!') print(Program.__dict__) print(python.__dict__) По такому простому коду можно понять, как инстанс, не имея в неймспейсе ничего, может ходить к классу и заимствовать у него атрибуты: python = Program() Но при этом будет спотыкаться о методы, в которых self не передается, что опять же нас возвращает к неймспейсам. Да и вообще раскрывает суть метода в связке с объектом в отличии от функции... К чему я это все? Получается, что new - создает объект, а init - неймспейс к нему.
@luchanos
@luchanos 2 жыл бұрын
звучит разумно! я думаю что для новичков это сложно осознать, но для углубленного разбора идея хорошая
@MikhailTsarev
@MikhailTsarev 2 жыл бұрын
Хороший ролик! Большое спасибо. Для "идеального" не хватило объяснения, что залетает под видом cls в __new__ (видимо, object или type...) и зачем переопределять __new___ на практике.
@hopelesssuprem1867
@hopelesssuprem1867 2 жыл бұрын
спасибо за видос, очень классно, только еще бы задачек закинуть для практики - ваще было бы супер. Такой вопрос: когда примерно выйдет курс? С удовольствием посмотрю в нем продвинутые темы))
@user-gf7fr8qw2e
@user-gf7fr8qw2e 2 жыл бұрын
в купе с каналом Python russia что то доходит
@maksimluzin1121
@maksimluzin1121 Жыл бұрын
Ну, формально говоря, конструктор в других языках ООП (С++, например) _тоже_ не "аллоцирует" экземпляр класса (объект) в памяти, а инициализирует его, хотя может и "раскидать"/"собрать" объект из других объектов внутри своего кода. Точнее, и более правильно говоря, _перед_ вызовом конструктора вызывается _встроенный_ метод (даже функция), которая выделяет "кусок" памяти по структуре/описанию класса, а потом уже вызывается конструктор, которому передаётся адрес этого "куска памяти"... Так что в Python'е, формально, происходит почти то же самое, только в более _явном_ виде! Сначала __new__ , который является аналогом встроенной функции в С++, а потом уже __init__ , который является аналогом конструктора (инициализатора) в С++... В общем, "те же я**а - только в профиль!" 😉
@yabarm
@yabarm 2 жыл бұрын
Понятное видео. На практике что в нью прописывается? Хочется на примерах понять его надобность
@luchanos
@luchanos 2 жыл бұрын
спасибо!) да, через переопределение new реализуется паттерн singletone
@MrLotrus
@MrLotrus 2 жыл бұрын
Спасибо. Я только не понял зачем ты в ___new___ указал принимать *args, **kwargs. И каким образом переданные аргументы через ___new___ прокидываются в ___init___
@nickyr42
@nickyr42 2 жыл бұрын
прикрепите пжлста ссылку на прошлый ролик, о котором упомянаете в записи?
@luchanos
@luchanos 2 жыл бұрын
про магические методы?
@adammagomedov9822
@adammagomedov9822 4 ай бұрын
Ничо не понял
ОСКАР ИСПОРТИЛ ДЖОНИ ЖИЗНЬ 😢 @lenta_com
01:01
Мы никогда не были так напуганы!
00:15
Аришнев
Рет қаралды 5 МЛН
ИРИНА КАЙРАТОВНА - АЙДАХАР (БЕКА) [MV]
02:51
ГОСТ ENTERTAINMENT
Рет қаралды 10 МЛН
The child was abused by the clown#Short #Officer Rabbit #angel
00:55
兔子警官
Рет қаралды 23 МЛН
КОНСТРУКТОР И ДЕСТРУКТОР В ПИТОНЕ
18:35
Андрей Иванов | Python
Рет қаралды 4 М.
Что такое classmethod в Python? | Питон ООП @staticmethod - методы класса
13:50
Практическое программирование Python
Рет қаралды 1,6 М.
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
ExtremeCode
Рет қаралды 544 М.
__new__ vs __init__ in Python
10:50
mCoding
Рет қаралды 206 М.
ОСКАР ИСПОРТИЛ ДЖОНИ ЖИЗНЬ 😢 @lenta_com
01:01