tubetranscript.io

Школа itProger / Программирование · Transcript · · Updated

Уроки Python с нуля / #18 – Конструкторы, переопределение методов – Transcript

Video by Школа itProger / Программирование · Watch the original on YouTube

Summary

AI-generated from the transcript. Verify details against the source video.

  • За счет конструкторов можно выполнить определенный код сразу же при создании объекта и установить значения.
  • Для создания конструктора используется специальное название метода с двойными нижними подчеркиваниями init.
  • Переопределение методов достигается за счет указания значений по умолчанию для параметров, что позволяет принимать разное количество аргументов.
Video thumbnail: Уроки Python с нуля / #18 – Конструкторы, переопределение методов
Source video on YouTube · Transcript generated automatically and may contain errors.

Use this video with Pro

Reading, copying and transcript downloads are free. Create saved AI results for this video with a signed-in Pro account ($9/month).

Transcript

Search ignores accents. All transcript text stays visible.

Привет! В ходе этого урока мы с вами изучим что такое конструкторы в классах, а также изучим тему переопределения методов. А перед началом я бы хотел порекомендовать сайт itprogr.com. На этом сайте вы найдете код, домашние задания и много другой полезной информации. Ссылка на этот урок на сайте будет в описании к этому видео.

Итак, сперва давайте поговорим относительно конструкторов. За счет конструкторов мы можем выполнить какой-либо определенный код сразу же при создании объекта. Конструкторы они максимально удобны для установки каких-либо значений. На данный момент, когда мы создаем какие-либо объекты, то изначально никаких данных вы сами объекты мы не передаём.

Чуть позже уже после создания объекта мы обращаемся к какому-либо методу и как раз через этот метод мы уже устанавливаем определенные значения. Но это все можно намного сократить, если мы будем использовать конструкторы. Поэтому давайте сейчас в наш класс добавим новый конструктор. Для этого я здесь прописываем что-то в духе создания новой функции.

Вот только эта функция должна иметь определенное название. Это название init. Если мы прописываем два нижних подчеркивания init и опять же два нижних подчеркивания, то тем самым мы создаем как раз конструктор. На данный момент, если я пропишу подобный конструктор, то это будет конструктор по умолчанию.

То есть он ничего дополнительно не принимает и ничего дополнительно не выполняет. Если я сейчас такое запущу, то вы можете заметить, что ничего вообще не поменялось и как будто этого конструктора здесь не существует. Так происходит под то причине, что опять же это конструктор по умолчанию.

Ничего не принял и ничего не выполнял. Нам такой конструктор не нужен. Мы давайте все-таки укажем, что что-то мы будем принимать. И я хочу принимать здесь три параметра. Это такие три параметра, что по факту я принимал в setData. То есть это nameH, а также isHappy. А также возможно действия, которые будут происходить в конструкторе, они пускай будут аналогичны тем действиям, что у нас происходили в методе setData.

То есть мы получаем три параметра и дальше мы как бы эти три значения устанавливаем в поля нашего класса. На данный момент вы можете заметить, что если я запущу сейчас программу, у нас будут выдаваться ошибки. Ошибки связаны с тем, что когда мы создаем сейчас объекты, то при создании объекта мы не передаем никаких значений.

Хотя у нас есть сейчас конструктор, который ожидает получение трех параметров. Поэтому чтобы избавиться от ошибки, мы должны как раз передавать здесь три значения при создании самого объекта. Ну а соответственно вот эти вот строчки кода, где мы используем setData, вот этот метод мы их можем закомментировать.

Таким образом, если сейчас я запущу, мы заметим, что у нас все обрабатывается корректно, вот только теперь установка данных происходит в момент создания самого объекта. Конструкторы, они попросту удобны тем, что позволяют облегчить код, потому что теперь нам не нужно создавать отдельные методы по установке значений, а также нам вот здесь не нужно вызывать эти отдельные методы, опять же по установке каких-либо значений.

Кроме того, в конструкторе, помимо установки значений, вы также можете выполнять какой-либо другой код. Вот, например, здесь я еще хочу выводить информацию на экран. Конечно же, я могу здесь прописать принт и прописать вывод всей необходимой мне информации, но зачем мне дублировать самого себя, если я могу просто обратиться к методу getData и соответственно выполнить сам по себе этот метод.

На данный момент, когда я пытаюсь обратиться к этому методу, у меня происходит ошибка. Ошибка, она связана с тем, что интерпредатор просто не понимает, какому конкретно методу я пытаюсь обратиться. Чтобы мне указать, что я хочу обратиться именно к методу, что принадлежит к этому классу, мне нужно прописать self, а дальше я уже могу спокойно обратиться к getData, в таком случае все обработается абсолютно корректно.

Кроме того, я могу еще немножко облегчить код, я могу просто обратиться здесь к self и дальше могу обратиться к setData и сюда же в этот метод я передам те значения, что я получаю вот здесь внутри самого конструктора. Таким образом, теперь наш конструктор, он как бы и устанавливает значение и получает значение.

Ну и если такое сейчас запустить, только давайте мы поудаляем не нужные строчки кода, то есть вот видите, у меня есть просто два объекта, я их просто создаю, и при создании этих объектов мы сразу установили данные и тут же сразу эти данные вывели. То бишь, за счет конструктора мы с вами выполнили весь тот функционал, что ранее у нас занимал дополнительные плюс четыре строчки кода, то есть две строчки кода на установку данных и плюс две строчки кода на вывод данных.

Теперь это все записано в одном месте и это максимально удобно. В будущем вы можете использовать конструкторы как для установки данных, так и для выполнения какого-то нового функционала, например вывода информации или там связи с базой данных или что-то в этом духе, но в общем конструкторы это те вещи, которые срабатывают при создании объекта, в них вы можете прописывать любые действия, что должны быть выполнены при создании самого объекта.

Ну и теперь давайте еще поговорим относительно переопределения методов. На данный момент у нас есть несколько методов, это setData, так же getData. Его давайте мы попробуем обратиться к setData и попробуем сюда передать не три параметра, а, например два параметра, например, здесь будет имя, а также возможно возраст, если я попытаюсь такой сейчас запустить, то конечно же у нас будет вызываться ошибка, за той причиной что данный метод он принимает три параметра, мы же передаем два параметра, то есть чтобы этот метод

у нас обработался корректно, здесь конечно же мне необходимо передать еще третий параметр, в таком случае оно обработается без каких-либо ошибок. Так вот, за счет переопределения методов мы с вами сможем обращаться к одному и тому же самому методу, но при этом сможем передавать разное количество параметров. Такое легко показать на примере функции print, то есть сюда мы в эту функцию можем передать как один определенный параметр, так и можем через опятую передать несколько параметров.

При этом первый параметр это может быть строка или число или переменная, ну и следующий параметр тоже могут быть строки, переменные, числа и так далее. все это будет обрабатываться корректно. Чтобы нам реализовать такой же функционал для метода setData, нам нужно сделать лишь одну небольшую вещь. Нам нужно указать значение по умолчанию для нашего последнего параметра. Здесь в качестве значения по умолчанию я укажу, например, none. Таким образом, теперь, когда я буду передавать в этот метод три параметра, то все эти три

параметра они сюда и будут записываться, то есть будет указываться name, age, а также будет указываться isHappy. Если же я буду вызывать этот же метод, но не буду передавать третьего параметра, то из happy он по умолчанию будет устанавливаться со значением none. Поэтому, если я сейчас запущу программу, мы замечаем, что все обрабатывается корректно, никаких ошибок не происходит, ну и мы можем спокойно теперь это все тестировать. Точно то же самое мы можем указать и для других параметров, то есть здесь и здесь я могу установить какое-то значение

по умолчанию, и в таком случае мы с вами можем сюда теперь в этот метод передавать как три параметра, так и два параметра, так и один параметр. Получается, что за счет переопределения методов или другими словами за счет установки значений по умолчанию, мы с вами получаем один единственный метод с одним единственным названием, который принимает разное количество параметров. Чем это удобно, да просто тем, что теперь я не буду запоминать сотни различных возможных названий, а буду

просто обращаться по одному и тому же самому названию, при этом буду передавать то количество параметров, которое меня будет интересовать.

Если здесь я пропишу значения nann, то в таком случае я в будущем смогу создать объект как с передачей параметров и без передачи параметров. Если я здесь попробую не передавать никаких параметров, то в таком случае повсюду будет установлено nann. Потом мы попробуем вывести эти данные. Такое сейчас с вами запустим и мы с вами это замечаем. Программа никак не поломалась в то же время никаких параметров я сюда не передаю и у нас просто устанавливается

позволяет нам существенно сократить код в нашем приложении. Надеюсь урок вам понравился, если так, то не забывайте подписываться на канал, а также вступать в наши соцсети. Все ссылки на них будут в описании к этому видео. У меня же на этом все, так что увидимся в дальнейшем, до скорых встреч, пока!

Frequently asked questions

Конструкторы выполняют определенный код сразу при создании объекта и удобны для установки значений.

Переопределение методов реализуется за счет указания значений по умолчанию для параметров.