Step 3 (S-98749)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/24462/step/3

Step 3 (S-98749) 1.png

[00:00 - 00:18] остался открытым интересный вопрос если носить экземпляр икс класса а и не пытаемся вызвать какой нибудь метод который не является атрибутом наших экземпляра икс и которые не являются предметом нашего класса а так дальше для а использовали множественного наследования каково же из классов от которых мы наслаждаемся


[00:18 - 00:33] мы должны эту функцию которая была связана с методом нашего объекта икс когда мы не используем наш наследования всего за что просто вот наглухо осмотрись например он отказался от листа


[00:33 - 00:50] алиса с английски поэтому на станции шатле вот здесь мы создаем экземпляр x класса мы лист и вот здесь мы вызывали какой то метод нашего икс а как мы помним и сначала посмотрели бы


[00:50 - 01:08] если юля extend атрибутом самого экземпляра икс нет не является потому мы посмотрели в классе моей с нет не является потому что в мае 1 функция и вланов а затем пошли проверили класс листы нашли бы его там потому что extent определенный


[01:08 - 01:27] христа а вот если бы мы вместе и вы не нашли это на самом деле мы пошли вы посмотрели дальше лоджик тебя не нашли бы в облике и тогда бы сказали что вот мы вызвали плохой метод у такого метода таким образом в случае когда множественного наследования у нас нет все достаточно просто сначала пытаемся найти метод как атрибут экземпляр


[01:27 - 01:42] затем пытаемся найти функцию в соответствующем классе если нашли то режим себя по иракски класса до тех пор пока не найдем а если не найдем то просто завершаем исполнения с ошибкой в стоит заметить что на самом деле мы воспользовались методами листа сильно раньше


[01:42 - 02:01] прежде всего когда мы запустили для нашего экземпляра икс конструкторами листа что происходит на самом деле в интерпретаторе каждый раз когда интерпретатор видит конструкторов какой то класс он пытается внутри этого класса найти метод имеет чтобы проинициализировать экземпляр который создается


[02:01 - 02:19] а так как метод имеет не находится в классе мои лист потому что мы здесь не определили то он находится выше собсно в нашем классе list поэтому конструктор который мы запускаем на самом деле когда мы создаем экземпляр класса молитв


[02:19 - 02:35] конструктора листа дальше еще лучше когда мы с вами этот принцип какой нибудь экземпляр интерпретатора пытается найти внутри этого экземпляра метод энтер


[02:35 - 02:51] я про это сокращение от английского слова репрезентативен или представления а это должно выглядеть строковое представление объекта которым в консоли принтерных


[02:51 - 03:07] вот и когда мы не находим в моей системы летел вниз находим его там поэтому представление нашего экземпляра выглядит так миленько я абсолютно точно так же как и лист теперь убедились в том что метод вызывается гораздо чаще чем у них на самом деле вызываем сами


Step 3 (S-98749) 2.png

[03:07 - 03:25] поэтому очень важно понимать порядок в котором мы перебираем классы когда еще функция чтобы связать с методом особенно сильно это важно в том случае когда мы сможем множественного наследования вернемся к примеру лист на с это не только от листа или еще какого нибудь класс тогда


[03:25 - 03:40] у нас нетривиальным вопрос как если мы вызываем метод нашего экземпляра икс каком же порядке мы должны перебрать классы когда ищем функцию чтобы сопоставить ее нашему связано умеренном


[03:40 - 03:58] вот сейчас мы перебрали икс затем должны перебрать опыт или затем должны перебрать этот класс для того чтобы решать подобные конфликты в языке есть порядок разрешения методов разрешения методов определяется в момент создания класса в языке поэтому можно вывести вас помощью метода mbr которые есть у любого класс


Step 3 (S-98749) 3.png

[03:58 - 04:13] скажем старому к примеру вот определенными классами с такой структурой и вот если мы увидим о он же сокращение от метод резолюшн


[04:13 - 04:29] то есть порядок разрешения так вот если бы мы увидели это на экран то мы бы увидели список классов это тот порядок в котором вы мы перебирали когда вы искали метр то есть если бы назло допустим экземпляр класса


[04:29 - 04:46] а икс в пытались исполнить метод метод этого экземпляра и при этом наш метод не является атрибутом самойленко икс то сначала бы поискали в классе а затем в классе б м классе да


[04:46 - 05:01] я с и в классе опыт и как только перебирая классов подобным порядке начни функцию метод этого класса мы останавливались и связывали эту функцию с нашим методом что же нам гарантирует порядок разрешения


[05:01 - 05:16] прежде всего каждый предок нашего класса там будет всего лишь в единственном числе можно увидеть что здесь вы 6 элементов и патронов все 6 классов пыталась сейчас это наследование также можем гарантировать что если мы наследовали какой нибудь класс а допустим от класса б


[05:16 - 05:36] в нашем порядка разрешения методов с начала года а затем будет б то есть в нашем случае допустим dance о том как то при этом очередь находится после да не обязательно что все это сразу после до главной чтобы он был в порядке разрешения после да


[05:36 - 05:53] если же мы использовали множественном наследовании можем гарантировать что родительские классы после в том же порядке в котором они указаны в скобках слева направо то есть в нашем случае для класса а мы знаем что он остается от боится поэтому я сначала в этот класс а с ним случилось б


[05:53 - 06:10] затем следует пловца здесь также не обязательно чтобы класться следовал сразу после класса б класс после этого сразу после класса а конечно нибудь редко встречаться с такими сложными схемами однако общее понимание того что при множественном наследовании мы перебираем родителей в том же порядке в котором их объявляем крайне важна


Step 3 (S-98749) 4.png

[06:10 - 06:27] давайте рассмотрим множественного наследования на примере мы листа как написать мои есть используя множественное наследование мы сейчас написали класс примеси в этом классе живу всего лишь 1 метод который проверяет длину на четность потому что мы будем перемешивать его функциональность


[06:27 - 06:45] к нашему основном класс в нашем случае это лист наш класс молись наследуется от листа и затем наследуются от нашей примеси тогда несложно убедиться в том как же выглядит наш порядок разрешения методов все будет на вас молиться но в нем никто ничего не найдем потому что в нем и методов то особенно нет


[06:45 - 07:05] каким будет наш основной класс лист в котором почти все что не найдем мы пойдем поищем нашей прессе а затем таким образом конструктор мы идем в нашем классе list потому что он там есть а затем мы будем вызывать метод и варламов и так как в листе его нет


[07:05 - 07:21] мы пойдем поищем в нашей прессе тогда наш метод и он ланц и убедимся в том что пока что нас лист нечетной длинны мы запустим этот абонент который мы также сможем найти блестя и затем можно убедиться в том что теперь список стал четной длинные


Step 3 (S-98749) 5.png

[07:21 - 07:40] самое замечательное в том что мы используем такую примесь это то что в качестве класса к которому мы добавляем функциональность подойдет любой класс у которого есть длина 1 элемента списка также использовать слова или опустим строку вполне правильным применением было бы использовать эту прелесть сразу для нескольких классов


[07:40 - 07:57] помоги подобрать функциональность на ошибочность список и он икс давайте начинать наши обычные словарь затем создать словарь убедиться в том что действительно мы добавляем туда пар ключ значение и при этом он ссылается черный длинный а что же случится если мы право определять в нашем


Step 3 (S-98749) 6.png

[07:57 - 08:12] семья то с таким же именем как в 1 из родительских классов да вообще то ничего страшного то есть мы конечно же можем использовать метод с подобным именем рассмотрим пример у нас также создается класс мои сны внутри мы определяем метод стоит помнить что нет


[08:12 - 08:31] также поделен на 3 листа а возвращать последний вариант этого списка и этот список сокращает на этот самый элемент теперь когда мы вызываем метод попу экземпляр нашего класса молись мы будем вызывать функцию из класса мои есть то есть допустим мы здесь объявлен моделисты и вот и 1 мл


[08:31 - 08:48] тот самый мл провоцировал именно с функцией топ из класса молитв однако иногда возникает необходимость вызвать метод так как будто он не определен в нашем классе определен в конце из родительских для этого есть функция супер функции супер 2 аргумента


[08:48 - 09:03] 1 аргумент про класс родители которого мы хотим проверить объект с которым хотим процитировать менять таким образом грамм или лишь вот такую конструкцию мы пойдем искать место в родителях


[09:03 - 09:18] классом и есть в том же порядке в котором они перечислены в порядке разрешения методов собсно исключая самое лист а затем функцию которую мы найдем вы про сыры с объектом сос получается что такая запись абсолютно эквивалентно если бы мы вызвали


[09:18 - 09:38] функцию поп из класса list и передали в явном и 2 случае вся наша функция класса молитв в я себя в точности так же как ведет себя функционал в классе лист а на каждой дополнительной информации на экран там какое было последнее значение в списке


[09:38 - 09:57] таким образом механизмы наследования множественного наследования в том что функция супер нужно просто тогда когда функциональности какого то класса нам немножко но не хватает и мы хотели бы я дополнительно при этом сделать так чтобы в основном наш объект вели себя так же как объект этого класса именно для этого мы используем наследования