видно, что у человека порядок в голове и полное понимание темы. Потому информация, которую он доносит максимально легко усваивается. Спасибо
@Shishio582 жыл бұрын
Кто ты????? Откуда ты??? Просто пусть у тебя будет так же гладко по жизни как ты даешь материал! Лучший!!!!!!!!!!!
@ПлатонТрипуть Жыл бұрын
В этом ролкике поначалу было трудно , но после тщательного просмотра несколько раз, до меня ,наконец все дошло , по-моему , один из лучших курсов в СНГ по ООП
@mslq Жыл бұрын
Однозначно! Это лучшие видосы по пайтону, но всё равно я другие тоже засматриваюсь, для закрепления темы.
@АркадийПоддубный12 күн бұрын
Огромное спасибо Сергею за работу - он действительно один из немногих, кто умеет просто объяснять сложные темы. Но позволю себе пару замечаний в порядке конструктивной критики. Автор адски путается в терминах, что затрудняет понимание материала. В частности, чтобы не быть голословным. 1) понятия "экземпляр класса" (или "объект класса") и "класс" зачастую используются как синонимы, что является грубой ошибкой. Экземпляр (или объект класса) и сам класс - это не одно и то же. В частности, параметр cls в методе __new__ - это ссылка не на экземпляр класса (т. к. на данном этапе экземпляров класса еще нет), а на создаваемый класс. 2) точно так же не являются синонимами термины "атрибут" класса и "свойство", но автор нередко называет одно другим, что очень путает - особенно если ты начинающий. Не зря ведь наверное в англоязычных источниках есть два термина - attribute и property. Но в целом, повторюсь, данный канал - это порой единственное, что помогает разобраться в некоторых темах. Поэтому, надеюсь, критика не прозвучала голословно.
@ЭльвираСадыкова-э7г7 ай бұрын
Прочитала комментарии и хочется сказать - тут зрители аплодируют , апплодируют. Так понятно, что ни йуха не понятно.
@alEx-xs9kvАй бұрын
Потому что питон нужно изучать после плюсов и будет всё понятно)
@ЕрвандАгаджанян-в3к2 жыл бұрын
Ты абсолютный гений!!! Какая-то невероятная подача материала!!! Спасибо!!!
@maxholon Жыл бұрын
Подача настолько хороша, что я уже прям чувствую, что скоро начну начинать понимать.
@katerikaL6 ай бұрын
ООП становится интересной темой. Огромнейшее спасибо, мне столько в институте не рассказывали сколько я от вас узнала❤🔥❤🔥
@КонстантинБарышев-ю9ю2 жыл бұрын
Очень качественная подача, браво!
@NoName-hi8bv Жыл бұрын
Наконец то всё просто и лаконично без взякий дёрганей. Кратко и по факту. Что как создаётся. Почему столь простые вещи так усложняют.
@ArntorRUS2 ай бұрын
Спасибо за подробную и интересную подачу материала! Как раз смотрел искал реализацию такой возможности!
@sofiipochtaАй бұрын
Спасибо, посмотрела!
@ccjx_space Жыл бұрын
Вы объясняете детали, которые у человека маловероятно, что выйдет получить читая книги. Большое Вам спасибо!
@clqwnless Жыл бұрын
Спасибо за очень хорошее объяснение! Мне понравилось очень сильно то, что вы добавили "__del__'!
@vladimirkulakov86672 жыл бұрын
Спасибо! Очень интересно и доходчиво! Чувствую как растет моя суперсила))))
@igor-policee2 жыл бұрын
Прекрасные уроки, спасибо!
@yyykkk41752 жыл бұрын
Теперь в уроке следующая проблема (Python 3.8.6) ----> при удалении экземпляра класса прописанный служебный метод __del__ не отрабатывает. Те он не меняет атрибут класса. Такое ощущение, что есть какие-то ref'ы к атрибуту именно класса от экземпляра, что препятствует правильному срабатыванию __del__ . Когда атрибут класса является чем либо, но не присваиваемым классом, все отрабатывает на ура, но когда атрибут - сам же класс, то тут начинаются проблемы. Тема с синглтонами весьма неоднозначна и имеет очень много подводных камней. PS Лайк все-равно поставил)))
@non53092 жыл бұрын
Спасибо автору за материалы. Адаптацию практики бы еще под этот новый материал - было бы супер. Да вообще я был бы не против заплатить на каком-нибудь степике за глубокий курс по ООП с хорошими задачами по практике
@UrTa91 Жыл бұрын
Так они там вроде есть?
@nightyum Жыл бұрын
Отличный канал по урокам на питон, всё понятно, спасибо большое!
@igorb.49172 жыл бұрын
Отличный курс, спасибо!
@СарматПересветов Жыл бұрын
очень крутой урок, огромное спасибо за ваш труд!
@nikitun852 жыл бұрын
Друже, неистово плюсуюсь к восхищающимся твоей подачей. Очень доходчиво!
@rogersmith314110 ай бұрын
Объяснение просто огонь!
@VladislavVoronin-fc1fo Жыл бұрын
Уроки - моё почтение. 10/10
@suslikest3708 Жыл бұрын
Топ! до этого видоса я не до конца понимал суть этого маг метода.
@gilman2056 Жыл бұрын
ясно-спасибо, действительно подача материала хорошая все остальные ролик выше по запросу непонятно объясняют некоторые моменты
@andredru42787 ай бұрын
Спасибо. Понятно. Вперед!
@aleksandrsemenov17642 жыл бұрын
Очень полезный материал, я уже год учу пайтон и информация по реализации Singleton очень кстати. Спасибо!
@empty92282 жыл бұрын
Сергей, спасибо за урок! У вас отличная подача материала.
@vladislavshesternov83842 жыл бұрын
Конечно, огромный разрыв в понимании в сравнении с предыдущим курсом, хотя.. Может мне только так кажется, учитываю, что я его прошел и сейчас по сути занимаюсь повторением материала? Ну а так, огромное СПАСИБО автору, очень постарался, это прям видно =)
@matsveiv67125 ай бұрын
Еще раз огромное спасибо! Было бы славно, если бы вы опубликовали код программы в описании для разбора и редактирования.
@milash88616 ай бұрын
Наконец-то поняла, спасибо!❤
@ВикторПелих-я6ш Жыл бұрын
Спасибо за ещё одну порцию информации. Дааа... это, конечно, не "ООП за 15 минут"
@KromlechKannabikus2 жыл бұрын
Мастерски подан материал. Благодарю
@Receive_2 жыл бұрын
У меня одного сейчас мозг взорвется? Как было все легко до знакомства с ООП
@skeam9988 Жыл бұрын
Не одной, всё нормально
@UCgmf-pIUcccps9m1uGjOxaQ Жыл бұрын
Дорогу осилит идущий!
@Developer_python_ Жыл бұрын
next django)
@alexandr8153 Жыл бұрын
Я с ооп уже год топчусь на месте. Не читайте М. Лутца, он сложно о простом пишет
@linked_list_DLL2 ай бұрын
Крч, для чайников, если кто не понял. В старых версиях python, когда мы определяли класс, мы всегда наследовались от базового object. Т.е, писали мы следующее: class (object): .После релиза python 3 этот синтаксис упростился и стали писать без наследования. Иными словами, функция super() неявно ссылается на суперкласс object, в котором вызывается дандер __new__, а в аргумент этого дандера закидываем ссылку на наш созданный класс (класс Point).
@cs_dequeue2 жыл бұрын
Супер обяснение! Было очень понятно и полезно. Пошел искать видео про магический метод __call__)
@СашаКарташов-э8ъ6 ай бұрын
Нашел что то?
@cs_dequeue6 ай бұрын
@@СашаКарташов-э8ъ давно) магический метод __call__ делает инстансы(экземпляры) класса вызываемыми(callable), т е. если у нас есть класс MyClass у которого есть метод __call__, то m = MyClass, тут m экземпляр MyClass, и при m() - вызывается метод __call__. Так можно к примеру реализовать декораторы на основе классов. Это если вкратце. Пс: Возможно в этом видео это все уже сказано, комментарии мой старый, а видео не пересмотрел)
@nadyamoscow24613 ай бұрын
Далеко ходили? Он же есть в этом же курсе
@McClean974Ай бұрын
@@cs_dequeue уже устроились на работу?😂
@cs_dequeueАй бұрын
@@McClean974 уже давно) когда оставил коммент тогда уже)
@dmitriibalakshyi9473 Жыл бұрын
Очень доступно, супер спасибо!!!
@ISAWER1 Жыл бұрын
лайк и коммент в поддержку канала
@Developer_python_2 жыл бұрын
Тот случай когда сначала лайк!Почему так мало просмотров?Неужели так мало пайтонистов?
@ftb2024_official Жыл бұрын
Спасибо вам большое 🤝
@yoruwamatahajimaru Жыл бұрын
офигенно, еще и с синглтоном! спасибище
@DARIAFRAY2 жыл бұрын
спасибо Вам за материал!
@ArtemUrdin2 жыл бұрын
Молодчинка , лучший !!!
@elenamalysheva5647 Жыл бұрын
Голос похожий на Николя Дроздова из "Мира животных"
@GROMOZEKA_NZT Жыл бұрын
Ты сломал моё восприятие уроков этим комментом. Теперь мне всегда кажется, что меня обучает Николай Дроздов
@gen1212 жыл бұрын
Большое спасибо
@PaltsevPro2 жыл бұрын
Вот теперь я понял для чего нужен del xD
@morkovka2005 Жыл бұрын
Очень крутое видео, но мозг бум-бум)
@jaksonmillka18 күн бұрын
Урок #4 = Пройден С одной стороны, __new__ понятен, а с другой - нет... Хоть вы и привели пример, где он может использоваться, но все равно, особой цели его не понятно. Единственное что понятно, так это то что, сначала вызывается __new__, а потом только __init__, и мы можем его контролировать, однако, конкретной цели его, мне пока что не ясна. Надеюсь в дальнейшем, я пойму, как его можно контролировать под определенную задачу
@jamjam3337 Жыл бұрын
Спасибо!👏
@0ver4ance Жыл бұрын
@Сергей Балакирев, а зачем вообще нужно писать финализатор __del__? Ведь он вызывается тогда, когда объект попадает в сборщик мусора, но он никогда туда не попадет, так как атрибут __instance все ровно будет ссылаться на объект, следовательно и счетчик ссылок на объект никогда не будет равен нулю, если только мы вручную не переназначим __instance на другой объект
@selfedu_rus Жыл бұрын
он реально очень редко прописывается, только если что то нужно сделать с данными при удалении объекта
@antonivanov3830 Жыл бұрын
@@selfedu_rus, а если без него все работает (я прогнал все то же самое без этого метода, результат тот же), для чего его здесь нужно было прописывать, возможно, есть какие-то примеры?
@nikitabbrv59472 жыл бұрын
Ухх что-то __new__ тяжело заходит, особенно вместе с super)
@DavidDavid-zm1kj Жыл бұрын
Все очень доходчиво, но неплохо бы про __call__ досказать... Интересно ведь! Спасибо!!!
@johnmazepa Жыл бұрын
в уроке №12 досказывает))
@Konstantin_Stalnov Жыл бұрын
12:40 Чтобы это поправить нужно просто return засунуть под if
@GROMOZEKA_NZT Жыл бұрын
Прочитал все комментарии и не нашлось ответа на вопрос: Если мы удаляем объект через команду del, то классовая переменная по идее должна автоматически None без метода __del__? А если мы не будем вручную удалять объект, а просто присвоем ссылку на другой, то получается в классе будет висеть переменная __instance с сылкой на объект и у нас не будет возможности его удалить командой del?
@bobby_ridge7 ай бұрын
Клевое объяснение Что значит __перед переменной?
@richardplantagenet40955 ай бұрын
dunder method. Double UDERscore
@mason228x5 ай бұрын
Это тоже самое что и диез # как ноты lya только при помощи языка lua в том числе UDERscore под double что не патч самого этого method но является еще и классом dunder что под имением super() выводится на главный образ
@gayratsaidakhmedov54519 ай бұрын
спасибо
@ИгорьКлимов-м1ц3 ай бұрын
Небольшое уточнение т.к возможно, оговорились: 1:15 cls - ссылка на сам класс. self - ссылка на текущий экземпляр класса (объект).
@ИгорьКлимов-м1ц3 ай бұрын
UPD. Если мы имеем ввиду, что Объект - экземпляр класса
@ДарьяСнеговская-ъ4м2 ай бұрын
Сергей, огромное спасибо вам за урок. Единственное, что осталось непонятным, - как переопределение метода `__call__` в примере с DataBase поможет избежать переопределения атрибутов в `__init__`? Почему вообще зашла речь о методе `__call__`, если объект класса здесь нигде сам по себе не вызывается? И как всё-таки избежать проблемы с переинициализацией? Я сходу могу придумать только что-то вроде индикатора, что объект уже был инициализирован - т.е. идейно того же самого __instance, с той только разницей, что он будет проверяться в `__init__`'е, уже после создания объекта. Например, так (упомянутый индикатор назван `__initialized`): ``` class DataBase: __instance = None __initialized = False def __new__: ... def __init__(self, user, psw, port): if __initialized == True: pass else: self.user = user ... ``` И как всё-таки будет по-правильному?
@Archewar Жыл бұрын
у меня вскипают мозги, но я что то начинаю понимать в отличии от других роликов про ооп где я не понимал ничего
@станиславзотов-д7у Жыл бұрын
А где бы почитать как использовать метод __call__ что бы значения атрибутов, при попытке новой инициализации, не менялись?
@RockstarAlexander2 жыл бұрын
👍👍👍👍👍
@Alichok59 Жыл бұрын
Вот пример паттерна Singleton, где свойсва экземпляров сохраняются: class MetaSingleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(MetaSingleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class Logger(metaclass=MetaSingleton): def __init__(self, age, jf,): self.age = age self.jf = jf logger1 = Logger('23', 55) logger2 = Logger('42', 77) print(logger1, logger2) print(logger1.__dict__) print(logger2.__dict__)
@selfedu_rus Жыл бұрын
Класс!
@ДарьяСнеговская-ъ4м2 ай бұрын
Спасибо за показанный вариант! Попыталась разобраться с ним, и первый вопрос, который возник при разборе (кстати, этот же вопрос возник и при просмотре @selfedu_rus про метод `__call__`): почему у вас переопределение метода `__call__` срабатывает для всего класса, а не для объекта этого класса? Как вы этого добились?
@МамонтовОлег-в9о2 жыл бұрын
радует
@pip_install7496Ай бұрын
Почему мы не можем вызвать магический метод __new__ у класса super без скобок? super.__new__(cls)
@TheSSUnit Жыл бұрын
возможно уже писали, но cls (1:13) ссылается на сам класс(не экземпляр класса, если я не путаю)
@selfedu_rus Жыл бұрын
В видео так и говорится, там только лишнее слово "экземпляр", нужно просто "класс". Но это из видео понятно совершенно четко.
@alexandrshoobenkov216311 ай бұрын
Примерно на 10 мин. 10 сек. в видео создается метод __del__ в котором значение __instanse вновь приравнивается к None. НО ведь в таком случае мы переопределяем метод __del__, и работать он просто не будет. Мы, как я понимаю, должны были строчкой ниже через super сослаться на нативный __del__ из старшего класса, от которого наследуемся. Или я что-то не понимаю? Спасибо!
@antoxxxa1542 жыл бұрын
__super__ !
@zakirovio Жыл бұрын
добрый день. пишу конспект по ооп для собеса. Не подскажете, а правильно ли будет озвучить ответ на вопрос о __new__ в таком виде: Магический метод __new__ неявно вызывается интерпретатором перед созданием экземпляра класса и возвращает ссылку по которой будет создан объект и далее при помощи конструктора __init__ примет необходимые свойства.
@IncredibleSparrow Жыл бұрын
Почему бы не запихнуть определение метода init в условный оператор в методе new? Или тогда он не будет автоматически вызываться при создании класса тогда?
@st0nedcreature173 ай бұрын
Откуда взялся id для db?))
@kurtmiller772 жыл бұрын
Отличное видео, теперь корректно удаляем. Я бы лишь добавил, что синглтон считается антипаттерном и его следует использовать с осторожностью. Но на таком уровне сложно донести почему это так.
@ksymbescenny8859 Жыл бұрын
Подскажите пожалуйста если в методе __new__ нужно как нибудь проверить параметры, в *args например, после чего создаеться новый обьект с помощью super().__new__(cls) - как их после проверки дальше перенаправить так же в *args далее в __init__ , как правильно прописать синтаксис аля: super().__new__(cls)(*args, **kwargs)
@Dragonoid_369_44 ай бұрын
не все понял. Это нужно для чего? Если по прошлым роликам даже на примере с котами. У меня класс св котором хранятся значения для котов. Экземпляры классов хранят в себе разных котов и их значения. Если у класса есть общее значение как цвет или размер у точек, то все экземпляры будут хранить эту информацию как общую? А в данном ролике я так понимаю если я создам экземпляр кота cat в нем будет например возраст = 10. Порода и еще что то и парочка общих значений. А потом захочу создать cat2 где по всем значениям и названиям(кроме общих) это будет полностью другой кот. то я не смогу этого сделать т.к на класс должен быть только 1 экземпляр? Тогда зачем этот класс нужен
@rattlik12 жыл бұрын
Спасибо, интересно. Подскажите, стоит ли читать Лутца, если уже обладаешь средними знаниями Python?
@selfedu_rus2 жыл бұрын
Не знаю, не читал ))
@rattlik12 жыл бұрын
@@selfedu_rus :)
@ИгорьЖуков-ч4б2 жыл бұрын
@@rattlik1 Я тоже таким вопрос задавался) В итоге просто пробежался по оглавлению Лутца. Прочитал пару глав незнакомых и понял, что в принципе можно и без прочтения этой книги обойтись. Но книга действительно неплохая, особенно понравилось, что в конце глав даётся список вопросов, а потом подробные ответы. Не знаю, может быть так во всех книгах сейчас, но например, когда я в школе учился, не видел ни одного учебника, чтобы после теоретических вопросов потом давались ответы на них
@rattlik12 жыл бұрын
@@ИгорьЖуков-ч4б большое спасибо!
@andruhaz2 жыл бұрын
IMHO стоит, особенно по ООП (том2), он там так все подробно объясняет, и по нескольку раз. Книга сама дорогая, но можно раздобыть электронную версию. Даже если ты что-то знаешь никогда не лишне взглянуть с какого-то другого угла, многое заново узнаешь
@slava65669 ай бұрын
как получаемые параметры *args и **kwargs методом __new__ передаются далее в __init__? ведь они из __new__ не передаются методу __new__ базового класса .. какой-то __new__ слишком магический метод))
@vlad161092 Жыл бұрын
можешь, пожалуйста, прояснить, в контексте твоего примера: cls.__instance и DataBase.__instance = это тождественные понятия? Если да, то почему по-разному их пишем?
@selfedu_rus Жыл бұрын
Да, одно и то же. Только cls доступен не во всех методах, а только в классовых (есть еще статик и обычные). Если есть cls - это рекомендуемая практика. В других методах приходится для записи в атрибут класса использовать имя класса.
@vlad161092 Жыл бұрын
@@selfedu_rus финализатор __del__, он насколько критичен? Я так понял, что его вводят только для того, чтобы память чистить для быстродействия системы. Типа, если не прописал __del__, ну и ладно, не очень критично для самого выполнения кода
@selfedu_rus Жыл бұрын
@@vlad161092 да, его редко используют, память чистить не нужно, т.к. Python (сборщик мусора) это делает автоматически
@richardplantagenet40955 ай бұрын
А почему мы не можем просто вместо super() указать object? Ведь super просто - напросто возвращает аллокацию в памяти нашего базового класса object. P.S. Работает одинаково
@IvanDiiakonu2 жыл бұрын
Сергей добрый день ! Спасибо за ваш курс! Подскажите пожалуйста, я столкнулся с вот такой ошибкой в конце данного занятия: AttributeError: 'DataBase' object has no attribute 'user' Не могу понять что я делаю не правильно. Буду вам очень благодарен за помощь! Работаю в PyCharm Вот код как на видео: class DataBase: __instance = None def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = super().__new__(cls) return cls.__instance def __del__(self): DataBase.__instance = None def __int__(self, user, psw, port): self.user = user self.psw = psw self.port = port def connect(self): print(f"соединение с БД: {self.user}, {self.psw}, {self.port}") def close(self): print("закрытие соединение с БД") def read(self): return "данные из БД" def write(self, data): print(f"запись в БД {data}") db = DataBase('root', '1234', 80) db2 = DataBase('root2', '5678', 40) db.connect() db2.connect()
@selfedu_rus2 жыл бұрын
вы вместо init прописали int ))
@IvanDiiakonu2 жыл бұрын
@@selfedu_rus стыдоба....😨
@IvanDiiakonu2 жыл бұрын
@@selfedu_rus спасибо большое !) даже не понимаю как я такое мог пропустить - много раз перепроверял, а на это даже не обратил ни малейшего внимания.
@void75732 жыл бұрын
Магия и бесовщина этот ваш питон. Но спасибо за разъяснения!
@makooprime Жыл бұрын
Отличные уроки. Спасибо автору за труд. Но у меня остался вопрос почему в данном примере не работает финализатор __del__? то есть я удаляю db и db2, создаю db3, и id вновь созданного экземпляра остался тот же что был у db и db2.
@selfedu_rus Жыл бұрын
он отработает, когда сборщик мусора соблаговолит удалить объект, а когда это произойдет никто не знает ))
@makooprime Жыл бұрын
@@selfedu_rus а если я принудительно пропишу del object_1 а потом создам object_2, почему в таком случае id(object_2) будет таким же как было id(object_1)
@selfedu_rus Жыл бұрын
@@makooprime насколько я помню программу, там на объект ведет ссылка из класса cls.__instance, а значит, сборщик мусора не уничтожит объект в памяти. При создании нового, просто получите ссылку на уже существующий. Подробнее это можно спросить у сообщества телеграм-канала.
@AS-th7xe Жыл бұрын
можете посоветовать сайт/курс на степике с задачами по практике по ООП?
@DmytroLarin2 жыл бұрын
Здравствуйте, очень понравился ваш урок, но есть небольшой вопросик. В методе __new__ для изминения значения __instance, Вы пишите cls.__instance, а в методе __del__ Вы пишите DataВase.__instance. В чем разница между этими двумя записями? Вроде как одно и тоже - все ссылается на класс DataBase... Или как?
@selfedu_rus2 жыл бұрын
в данном случае да, но лучше использовать cls, т.к. имя класса программист может изменить, а в коде забыть поменять
@DmytroLarin2 жыл бұрын
@@selfedu_rus Понял, спасибо!
@МихаилПривалов-ч2я Жыл бұрын
В методе __new__ cls ссылается на класс, поэтому для изменения значения __instance, пишут cls.__instance. У метода __del__ вместо cls self, а self ссылается на экземпляр класса, а не на сам класс как cls и поэтому, чтобы поменять атрибут класса (!не экземпляра класса) пишут (в нашем случае) DataBase.__instance, а не self. __instance.
@veahcen10 ай бұрын
@@selfedu_rusа как тогда правильно изменять атрибут класса, если в метод передается только self, как в __init__ или __del__? Ведь через self создастся новая переменная у экземпляра с таким же именем, а не изменится атрибут класса. Использовать type(self)?
@selfedu_rus10 ай бұрын
@@veahcen либо прописывать имя класса перед атрибутом (вместо self), либо (и чаще всего) создается метод класса (classmethod) и у него вместо self идет cls - ссылка на сам класс
@denisplotnikov68752 жыл бұрын
Все здорово, но у меня возник вопрос: на какой уровень (junior, middle) спрашивают данные вещи?
@selfedu_rus2 жыл бұрын
джун и это база )
@vb52ru2 жыл бұрын
Не понял что изменилось, вроде тот же урок
@selfedu_rus2 жыл бұрын
Была ошибка при реализации паттерна Singleton, поправил
@sofiya41.6 ай бұрын
1:19. Почему вы называете Класс экземпляром??, я уже запуталась что вы имеете в виду😢😢
@selfedu_rus6 ай бұрын
экземпляр = объект класса
@sofiya41.6 ай бұрын
@@selfedu_rus ну да,, экземпляр это также и объект, например pt = Point, в данном случае pt - это экземпляр класса Point, , но ведь сам Point это не экземпляр, это Класс, Либо я что то не поняла?
@obsi1019 Жыл бұрын
топ
@future_redesigned4 ай бұрын
У меня при таком раскладе не срабатывает del
@МихаилПривалов-ч2я Жыл бұрын
👀
@Sergey-cz7ym Жыл бұрын
10:13 подскажите, а можно вместо названия класса (DataBase.__instance = None) указать какую-то переменную, типа cls или super, но тут сдс не подойдет так его нет в области видимости переменных этого метода а super относится к родительскому классу, просто немного похоже на хардкодинг...
@Sergey-cz7ym Жыл бұрын
Всё, можно не отвечать, ответ есть в следующем видео :)
@AzizjanAyupov_leo9 ай бұрын
так почему инит не сработал??
@pauline012t4 ай бұрын
А обязательно писать финализатор? Что может произойти, если попытаться обойтись без дандера __del__?
@selfedu_rus4 ай бұрын
можно и без него (чаще именно так и делают)
@pauline012t4 ай бұрын
@@selfedu_rus ок, спасибо за ответ и качественный материал!)
@Tragichorse Жыл бұрын
Не очень понимаю один момент: создается впечатление, что с помощью __new__ экземпляр создается на базе класса object, а не Point. Или экземпляр автоматически прикрепляется к дочернему классу?
@selfedu_rus Жыл бұрын
На самом деле экземпляры создаются метаклассом type. Но это уже детали. Достаточно знать, что __new__ срабатывает непосредственно перед созданием объекта.
@Tragichorse Жыл бұрын
@@selfedu_rus спасибо:>
@dedpihto6802 жыл бұрын
вот есть некий метод в некотором классе (готовая библиотека из интернета) . и мне нужно выполнить какието свои действия при вызове этого метода ну и потом запустить этот метод(уже из библиотеки) чтобы он свое отработал. но я даже не знаю где его искать и уж тем более как его дополнить чтобы он выполнил мои действия. подскажите плз
@МаксимАндреев-я1г2 жыл бұрын
Перезалил, что-то новое добавил?!
@selfedu_rus2 жыл бұрын
да, ошибка в паттерне Singleton
@mksmvnv Жыл бұрын
у меня абсолютно так же код написан, но инит не вызывается(( в чем может быть косяк? вот код: class Point: def __new__(cls, *args, **kwargs): print('Вызов __new__ для' + str(cls)) return super().__new__(cls) def __int__(self, x=0, y=0): print('Вызов __init__ для' + str(self)) self.x = x self.y = y pt = Point(1, 5) print(pt) вот что принтуется: Вызов __new__ для без инита(
@AleksandrGurin9 ай бұрын
Может быть уже увидели, но у вас название функции __int__ а должно быть __init__ из-за этой опечатки и не работает.
@syberia37982 жыл бұрын
А почему в методе __new__ сам return не добавить во внутрь if. Тогда ведь и __init__не будет вызываться повторно? В этом же уроке в начале об этом говорилось? Зачем тогда нужен __call__? def __new__(...): if not cls.__instance: cls.__instance = super().__new__(cls) return cls.__instance
@selfedu_rus2 жыл бұрын
тогда при создании второго экземпляра будем получать None, а не ссылку на ранее созданный объект
@captaingames12 Жыл бұрын
@@selfedu_rus а в чем разница между id и адресом объекта? И будут ли у db и db2 одинаковые адреса?
@ОлегСмирнов-ю3к2 жыл бұрын
на сколько помню __instans нельзя изменить извне? потому что эта переменна закрыта __ вот такими подчеркиваниями?
@selfedu_rus2 жыл бұрын
да, так лучше, согласен
@FreeUkraine4ever Жыл бұрын
Получается магич метод __new выполняется сам автоматом при создании экземпляра класса?
@selfedu_rus Жыл бұрын
да
@mvo5450 Жыл бұрын
Здравствуйте. Скажите, а почему в этом методе def __new... If cls... is None, a не == None, например..?