/
fedorhub
/
Python_Le
Обзор
Документация
Войти
/
fedorhub
/
Python_Le
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
python/oop-12/index.htm
3 076 строк
364 KB
fedorhub
upload files
17 дек 2025, 14:35
17 дек 2025, 14:35
50de53d
Код
Авторство
О чём код?
<!DOCTYPE html> <html class="no-js" lang="ru-RU"> <head> <meta http-equiv="content-type" content="text/html" charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" > <link rel="profile" href="http://gmpg.org/xfn/11"> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <script> MathJax = { tex: { inlineMath: [['$','$'],['\\(','\\)']], processEscapes: true }, options: { ignoreHtmlClass: 'tex2jax_ignore|editor-rich-text' } }; </script> <!-- This site is optimized with the Yoast SEO plugin v23.8 - https://yoast.com/wordpress/plugins/seo/ --> <title>ООП. Классы и объекты | Программирование на Питоне</title> <meta name="description" content="Объектно-ориентированное программирование предполагает использование классов и создание объектов при написании кода в Питоне." /> <link rel="canonical" href="https://www.dmitrymakarov.ru/python/oop-12/" /> <meta property="og:locale" content="ru_RU" /> <meta property="og:type" content="article" /> <meta property="og:title" content="ООП. Классы и объекты | Программирование на Питоне" /> <meta property="og:description" content="Объектно-ориентированное программирование предполагает использование классов и создание объектов при написании кода в Питоне." /> <meta property="og:url" content="https://www.dmitrymakarov.ru/python/oop-12/" /> <meta property="og:site_name" content="Машинное обучение" /> <meta property="article:modified_time" content="2024-10-12T18:24:16+00:00" /> <meta property="og:image" content="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object.png" /> <meta property="og:image:width" content="1051" /> <meta property="og:image:height" content="621" /> <meta property="og:image:type" content="image/png" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:label1" content="Примерное время для чтения" /> <meta name="twitter:data1" content="23 минуты" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://www.dmitrymakarov.ru/python/oop-12/","url":"https://www.dmitrymakarov.ru/python/oop-12/","name":"ООП. Классы и объекты | Программирование на Питоне","isPartOf":{"@id":"https://www.dmitrymakarov.ru/#website"},"primaryImageOfPage":{"@id":"https://www.dmitrymakarov.ru/python/oop-12/#primaryimage"},"image":{"@id":"https://www.dmitrymakarov.ru/python/oop-12/#primaryimage"},"thumbnailUrl":"https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-1024x605.png","datePublished":"2022-04-01T08:24:11+00:00","dateModified":"2024-10-12T18:24:16+00:00","description":"Объектно-ориентированное программирование предполагает использование классов и создание объектов при написании кода в Питоне.","breadcrumb":{"@id":"https://www.dmitrymakarov.ru/python/oop-12/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https://www.dmitrymakarov.ru/python/oop-12/"]}]},{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https://www.dmitrymakarov.ru/python/oop-12/#primaryimage","url":"https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object.png","contentUrl":"https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object.png","width":1051,"height":621},{"@type":"BreadcrumbList","@id":"https://www.dmitrymakarov.ru/python/oop-12/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Главная страница","item":"https://www.dmitrymakarov.ru/"},{"@type":"ListItem","position":2,"name":"Программирование на Питоне","item":"https://www.dmitrymakarov.ru/python/"},{"@type":"ListItem","position":3,"name":"ООП. Классы и объекты"}]},{"@type":"WebSite","@id":"https://www.dmitrymakarov.ru/#website","url":"https://www.dmitrymakarov.ru/","name":"Машинное обучение","description":"","publisher":{"@id":"https://www.dmitrymakarov.ru/#/schema/person/3fc221e2d391cc5cfd9d31c9c251c2a4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.dmitrymakarov.ru/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":["Person","Organization"],"@id":"https://www.dmitrymakarov.ru/#/schema/person/3fc221e2d391cc5cfd9d31c9c251c2a4","name":"DmitryMakarov","image":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https://www.dmitrymakarov.ru/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/2c5f922d990c667feffc00f99517cc0e?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/2c5f922d990c667feffc00f99517cc0e?s=96&d=mm&r=g","caption":"DmitryMakarov"},"logo":{"@id":"https://www.dmitrymakarov.ru/#/schema/person/image/"}}]}</script> <!-- / Yoast SEO plugin. --> <link rel='dns-prefetch' href='//cdn.jsdelivr.net' /> <link rel="alternate" type="application/rss+xml" title="Машинное обучение » Лента" href="https://www.dmitrymakarov.ru/feed/" /> <link rel="alternate" type="application/rss+xml" title="Машинное обучение » Лента комментариев" href="https://www.dmitrymakarov.ru/comments/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.dmitrymakarov.ru\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.6.2"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <link rel='stylesheet' id='mci-footnotes-no-tooltips-pagelayout-none-css' href='https://www.dmitrymakarov.ru/wp-content/plugins/footnotes/css/footnotes-nottbrpl0.min.css?ver=2.7.3' type='text/css' media='all' /> <link rel='stylesheet' id='urvanov_syntax_highlighter-css' href='https://www.dmitrymakarov.ru/wp-content/plugins/urvanov-syntax-highlighter/css/min/urvanov_syntax_highlighter.min.css?ver=2.8.37' type='text/css' media='all' /> <link rel='stylesheet' id='crayon-theme-familiar-my-copy-css' href='https://www.dmitrymakarov.ru/wp-content/uploads/urvanov-syntax-highlighter/themes/familiar-my-copy/familiar-my-copy.css?ver=2.8.37' type='text/css' media='all' /> <link rel='stylesheet' id='crayon-font-consolas-css' href='https://www.dmitrymakarov.ru/wp-content/plugins/urvanov-syntax-highlighter/fonts/consolas.css?ver=2.8.37' type='text/css' media='all' /> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://www.dmitrymakarov.ru/wp-includes/css/dist/block-library/style.min.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='ultimate_blocks-cgb-style-css-css' href='https://www.dmitrymakarov.ru/wp-content/plugins/ultimate-blocks/dist/blocks.style.build.css?ver=672da521c88b0' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #121212;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #fff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--dark-gray: #333;--wp--preset--color--medium-gray: #555;--wp--preset--color--light-gray: #777;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 16px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 24px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--normal: 18px;--wp--preset--font-size--larger: 28px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='ub-extension-style-css-css' href='https://www.dmitrymakarov.ru/wp-content/plugins/ultimate-blocks/src/extensions/style.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='mcluhan-fonts-css' href='https://www.dmitrymakarov.ru/wp-content/themes/mcluhan/assets/css/fonts.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='fontawesome-css' href='https://www.dmitrymakarov.ru/wp-content/themes/mcluhan/assets/css/font-awesome.css?ver=6.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='mcluhan-style-css' href='https://www.dmitrymakarov.ru/wp-content/themes/mcluhan/style.css?ver=2.1.1' type='text/css' media='all' /> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" id="urvanov_syntax_highlighter_js-js-extra"> /* <![CDATA[ */ var UrvanovSyntaxHighlighterSyntaxSettings = {"version":"2.8.37","is_admin":"0","ajaxurl":"https:\/\/www.dmitrymakarov.ru\/wp-admin\/admin-ajax.php","prefix":"urvanov-syntax-highlighter-","setting":"urvanov-syntax-highlighter-setting","selected":"urvanov-syntax-highlighter-setting-selected","changed":"urvanov-syntax-highlighter-setting-changed","special":"urvanov-syntax-highlighter-setting-special","orig_value":"data-orig-value","debug":""}; var UrvanovSyntaxHighlighterSyntaxStrings = {"copy":"Copied to the clipboard","minimize":"Click To Expand Code"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-content/plugins/urvanov-syntax-highlighter/js/min/urvanov_syntax_highlighter.min.js?ver=2.8.37" id="urvanov_syntax_highlighter_js-js"></script> <style>#ub_table-of-contents-fc2f3e5b-25a7-47c4-91d3-8ea0f7c8d2b8{ }#ub_table-of-contents-fc2f3e5b-25a7-47c4-91d3-8ea0f7c8d2b8 .ub_table-of-contents-header{ text-align: left; } #ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7{ }#ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7 .wp-block-ub-content-toggle-accordion{ border-color: #f1f1f1; } #ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7 .wp-block-ub-content-toggle-accordion-title-wrap{ background-color: #f1f1f1; } #ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7 .wp-block-ub-content-toggle-accordion-title{ color: #000000; } #ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7 .wp-block-ub-content-toggle-accordion-toggle-wrap{ color: #000000; } .ub-content-toggle-title-570a7392-2914-4959-9d86-d3483930d87c > a{ color: inherit; }#ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4{ }#ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4 .wp-block-ub-content-toggle-accordion{ border-color: #f1f1f1; } #ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4 .wp-block-ub-content-toggle-accordion-title-wrap{ background-color: #f1f1f1; } #ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4 .wp-block-ub-content-toggle-accordion-title{ color: #000000; } #ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4 .wp-block-ub-content-toggle-accordion-toggle-wrap{ color: #000000; } .ub-content-toggle-title-32a77684-675d-4001-b018-c0d67e769784 > a{ color: inherit; }#ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440{ }#ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440 .wp-block-ub-content-toggle-accordion{ border-color: #f1f1f1; } #ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440 .wp-block-ub-content-toggle-accordion-title-wrap{ background-color: #f1f1f1; } #ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440 .wp-block-ub-content-toggle-accordion-title{ color: #000000; } #ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440 .wp-block-ub-content-toggle-accordion-toggle-wrap{ color: #000000; } .ub-content-toggle-title-802bcaee-a77a-4bb0-931e-9d9f65d02fd4 > a{ color: inherit; }</style> <!-- Customizer CSS --> <style type="text/css"> body .site-header { background-color:#004235; }.social-menu.desktop { background-color:#004235; }.social-menu a:hover { color:#004235; }.social-menu a.active { color:#004235; }.mobile-menu-wrapper { background-color:#004235; }.social-menu.mobile { background-color:#004235; }.mobile-search.active { background-color:#004235; } </style> <!-- /Customizer CSS --> <script>jQuery( 'html' ).removeClass( 'no-js' ).addClass( 'js' );</script> <style type="text/css">.broken_link, a.broken_link { text-decoration: line-through; }</style><style type="text/css" id="custom-background-css"> body.custom-background { background-color: #fff9ef; } </style> <link rel="icon" href="https://www.dmitrymakarov.ru/wp-content/uploads/2021/08/cropped-wp-favicon-512-32x32.png" sizes="32x32" /> <link rel="icon" href="https://www.dmitrymakarov.ru/wp-content/uploads/2021/08/cropped-wp-favicon-512-192x192.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://www.dmitrymakarov.ru/wp-content/uploads/2021/08/cropped-wp-favicon-512-180x180.png" /> <meta name="msapplication-TileImage" content="https://www.dmitrymakarov.ru/wp-content/uploads/2021/08/cropped-wp-favicon-512-270x270.png" /> <style type="text/css" media="all"> .footnotes_reference_container {margin-top: 24px !important; margin-bottom: 0px !important;} .footnote_container_prepare > p {border-bottom: 1px solid #aaaaaa !important;} </style> </head> <body class="page-template page-template-full-width-page-template page-template-full-width-page-template-php page page-id-9918 page-child parent-pageid-1374 custom-background full-width-template"> <a class="skip-link button" href="#site-content">Перейти к содержимому</a> <header class="site-header group"> <p class="site-title"><a href="https://www.dmitrymakarov.ru" class="site-name">Машинное обучение</a></p> <div class="nav-toggle"> <div class="bar"></div> <div class="bar"></div> </div> <div class="menu-wrapper"> <ul class="main-menu desktop"> </ul> </div><!-- .menu-wrapper --> <div class="social-menu desktop"> <ul class="social-menu-inner"> <li class="social-search-wrapper"><a href="https://www.dmitrymakarov.ru/?s="></a></li> </ul><!-- .social-menu-inner --> </div><!-- .social-menu --> </header><!-- header --> <div class="mobile-menu-wrapper"> <ul class="main-menu mobile"> <li class="toggle-mobile-search-wrapper"><a href="#" class="toggle-mobile-search">Поиск</a></li> </ul><!-- .main-menu.mobile --> </div><!-- .mobile-menu-wrapper --> <div class="mobile-search"> <div class="untoggle-mobile-search"></div> <form role="search" method="get" class="search-form" action="https://www.dmitrymakarov.ru/"> <label class="screen-reader-text" for="search-form-672da5220014f">Поиск:</label> <input type="search" id="search-form-672da5220014f" class="search-field" placeholder="Введите запрос" value="" name="s" autocomplete="off" /> </button> </form> <div class="mobile-results"> <div class="results-wrapper"></div> </div> </div><!-- .mobile-search --> <div class="search-overlay"> <form role="search" method="get" class="search-form" action="https://www.dmitrymakarov.ru/"> <label class="screen-reader-text" for="search-form-672da522001cb">Поиск:</label> <input type="search" id="search-form-672da522001cb" class="search-field" placeholder="Введите запрос" value="" name="s" autocomplete="off" /> </button> </form> </div><!-- .search-overlay --> <main class="site-content" id="site-content"> <article class="post-9918 page type-page status-publish hentry missing-thumbnail"> <header class="entry-header section-inner"> <h1 class="entry-title">ООП. Классы и объекты</h1> </header><!-- .entry-header --> <div class="entry-content section-inner"> <p class="has-light-gray-color has-text-color"><a href="https://www.dmitrymakarov.ru/">Все курсы</a> > <a href="https://www.dmitrymakarov.ru/python/">Программирование на Питоне</a> > Занятие 12</p> <p>До сих пор на этом курсе мы усиленно изучали программирование на Питоне, но практически не задумывались над тем, как мы программируем и как мы организовываем свой код. Все потому что код, который мы писали, был очень прост.</p> <p>Единственное, что мы довольно активно применяли — это <a href="https://www.dmitrymakarov.ru/python/functions-06/">функции</a>. Они помогали нам выделить повторяющиеся части кода и в дальнейшем просто обращались к ним по имени.</p> <p>При этом многие языки программирования (в том числе Питон) позволяют использовать подход, который существенно упрощает работу со сложно-структурированным кодом. Такой подход или парадигма называется <strong>объектно-ориентированным программированием</strong> или ООП (object-oriented programming, OOP).</p> <div class="wp-block-ub-table-of-contents-block ub_table-of-contents" id="ub_table-of-contents-fc2f3e5b-25a7-47c4-91d3-8ea0f7c8d2b8" data-linktodivider="false" data-showtext="show" data-hidetext="hide" data-scrolltype="auto" data-initiallyhideonmobile="false" data-initiallyshow="true"><div class="ub_table-of-contents-header-container"><div class="ub_table-of-contents-header"> <div class="ub_table-of-contents-title"><strong>Содержание занятия</strong></div></div></div><div class="ub_table-of-contents-extra-container"><div class="ub_table-of-contents-container ub_table-of-contents-1-column "><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#0-ponyatie-obektno-orientirovannogo-programmirovaniya>Понятие объектно-ориентированного программирования</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#1-klassy-i-obekty-v-pitone>Классы и объекты в Питоне</a><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#2-sozdanie-klassa-i-metod-__init__>Создание класса и метод .__init__()</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#3-sozdanie-obekta>Создание объекта</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#4-atributy-klassa>Атрибуты класса</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#5-metody-klassa>Методы класса</a></li></ul></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#6-printsipy-obektno-orientirovannogo-programmirovaniya>Принципы объектно-ориентированного программирования</a><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#7-inkapsulyatsiya>Инкапсуляция</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#9-nasledovanie>Наследование</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#14-polimorfizm>Полиморфизм</a></li></ul></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#17-paradigma-programmirovaniya>Парадигма программирования</a><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#18-imperativnoe-i-deklarativnoe-programmirovanie>Императивное и декларативное программирование</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#19-protsedurnoe-programmirovanie>Процедурное программирование</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#20-obektno-orientirovannoe-programmirovanie>Объектно-ориентированное программирование</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#21-funktsionalnoe-programmirovanie>Функциональное программирование</a></li></ul></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#25-klassy-i-obekty-v-mashinnom-obuchenii>Классы и объекты в машинном обучении</a><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#26-gotovye-klassy-biblioteki-sklearn>Готовые классы библиотеки sklearn</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#27-primer-oop-sobstvennyy-klass-lineynoy-regressii>Пример ООП: собственный класс линейной регрессии</a></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#28-para-vazhnykh-detaley>Пара важных деталей</a></li></ul></li><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#31-podvedem-itog>Подведем итог</a><ul><li><a href=https://www.dmitrymakarov.ru/python/oop-12/#32-voprosy-dlya-zakrepleniya>Вопросы для закрепления</a></li></ul></li></ul></div></div></div> <h2 class="wp-block-heading" id="0-ponyatie-obektno-orientirovannogo-programmirovaniya">Понятие объектно-ориентированного программирования</h2> <p>Отвлечемся на секунду от программирования. Представьте себе, что вам нужно нарисовать множество фигурок кошек. Хотя все кошки разные, у них все же есть нечто общее:</p> <ul class="wp-block-list"> <li>Во-первых, у них есть общие свойства, например, шерсть, когти и хвост;</li> <li>Кроме того, любая кошка может выполнять определенные действия: лазить по деревьям, мяукать и потягиваться.</li> </ul> <p>Если мы хотим максимально сэкономить время при рисовании кошек, то будет логично создать шаблон условной кошки, а затем копировать этот шаблон и дополнять нужными нам свойствами и положениями (действиями).</p> <p class="has-background" style="background-color:#ffe8c4">Так вот объектно-ориентированное программирование предполагает, что вначале мы создаем <em>шаблон</em> нужного нам предмета (назовем его <strong>классом</strong>, class), а затем на основе шаблона создаем <em>конкретный предмет</em> (назовем его <strong>объектом</strong>, object).</p> <figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="605" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-1024x605.png" alt="объектно-ориентированное программирование: класс и объект" class="wp-image-10225" style="width:755px;height:446px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-1024x605.png 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-300x177.png 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-768x454.png 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object-600x355.png 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/class-object.png 1051w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>Причем тип животного или цвет шерсти станут <strong>атрибутами</strong> (attribute) такого объекта, а способность выполнять определенные движения — <strong>методами</strong> (method).</p> <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="380" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am-1024x380.png" alt="атрибуты и методы класса" class="wp-image-10254" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am-1024x380.png 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am-300x111.png 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am-768x285.png 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am-600x223.png 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/am.png 1072w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>По большому счету в этом и заключается суть программирования, ориентированного на объект. Наши программы теперь состоят не из последовательных команд, а представляют собой объекты.</p> <p>Посмотрим как это можно реализовать в Питоне.</p> <p class="has-text-align-center has-white-color has-text-color has-background" style="background-color:#004235"><a href="https://colab.research.google.com/drive/1an_pTfwKdd4ggN2l5XggrcYY1m6dUdt_?usp=sharing" target="_blank" rel="noreferrer noopener">Откроем блокнот к этому занятию</a>⧉</p> <h2 class="wp-block-heading" id="1-klassy-i-obekty-v-pitone">Классы и объекты в Питоне</h2> <h3 class="wp-block-heading" id="2-sozdanie-klassa-i-metod-__init__">Создание класса и метод .__init__()</h3> <p>Класс в Питоне создается с помощью ключевого слова <strong>class</strong>, названия класса и двоеточия. Внутри класса необходимо прописать метод .<strong>__init__()</strong>, который будет создавать или инициализировать (initialize) объект этого класса. Методы прописываются через ключевое слово <strong>def</strong>.</p> <p>Дополнительно метод .<strong>__init__()</strong> нужно снабдить аргументом, его принято обозначать словом <strong>self</strong>, который при создании объекта будет ссылаться на этот же объект (то есть по сути сам на себя, отсюда и выбор такого названия).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baf91105291101" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baf91105291101-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf91105291101-1"><span class="crayon-c"># создадим класс CatClass</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baf91105291101-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf91105291101-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baf91105291101-4"><span class="crayon-h"> </span><span class="crayon-c"># и пропишем метод .__init__()</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf91105291101-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baf91105291101-6"><span class="crayon-h"> </span><span class="crayon-r">pass</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <p>Оператор <strong>pass</strong> мы указали, потому что метод класса, как и <a href="https://www.dmitrymakarov.ru/python/functions-06/#5-pustoe-telo-funktsii">тело функции</a>, нельзя оставлять пустым. Теперь давайте создадим или инициализируем объект созданного класса.</p> <h3 class="wp-block-heading" id="3-sozdanie-obekta">Создание объекта</h3> <p>Для того чтобы создать объект, запишем наш класс в переменную. Пусть это будет Matroskin. Дополнительно проверим тип данных новой переменной.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baf9f336665761" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf9f336665761-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baf9f336665761-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf9f336665761-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baf9f336665761-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baf9f336665761-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf9f336665761-1"><span class="crayon-c"># создадим объект Matroskin класса CatClass()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baf9f336665761-2"><span class="crayon-v">Matroskin</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf9f336665761-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baf9f336665761-4"><span class="crayon-c"># проверим тип данных созданной переменной</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baf9f336665761-5"><span class="crayon-k ">type</span><span class="crayon-sy">(</span><span class="crayon-v">Matroskin</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="119" src="https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-1024x119.png" alt="" class="wp-image-26674" style="width:749px;height:auto" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-1024x119.png 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-300x35.png 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-768x89.png 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-1536x178.png 1536w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-2048x237.png 2048w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-1200x139.png 1200w, https://www.dmitrymakarov.ru/wp-content/uploads/2024/05/image-2-600x70.png 600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>Мы создали класс и объект этого класса, однако, к сожалению, пользы этот класс пока никакой не приносит.</p> <p>Примечание. <span id="urvanov-syntax-highlighter-672da521bafa2760230862" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline crayon-theme-familiar-my-copy crayon-theme-familiar-my-copy-inline urvanov-syntax-highlighter-font-consolas" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">def __init__()</span></span> и <span id="urvanov-syntax-highlighter-672da521bafa4589437429" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline crayon-theme-familiar-my-copy crayon-theme-familiar-my-copy-inline urvanov-syntax-highlighter-font-consolas" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><no docstring></span></span> в выводе функции type указывают на то, что данный метод не содержит строк документации (docstrings). Подробнее об этом мы поговорим на <a href="https://www.dmitrymakarov.ru/python/script-13/#18-dokumentirovanie-koda-s-pomoshchyu-docstrings">следующем занятии</a>.</p> <h3 class="wp-block-heading" id="4-atributy-klassa">Атрибуты класса</h3> <p>Давайте дополним наш класс CatClass атрибутом типа (назовем его type_) и атрибутом цвета шерсти (color).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafa6383577405" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafa6383577405-11">11</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-1"><span class="crayon-c"># вновь создадим класс CatClass</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-4"><span class="crayon-h"> </span><span class="crayon-c"># метод .__init__() на этот раз принимает еще и параметр color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-6"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-7"><span class="crayon-h"> </span><span class="crayon-c"># этот параметр будет записан в переменную атрибута с таким же названием</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-8"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-9"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-10"><span class="crayon-h"> </span><span class="crayon-c"># значение атрибута type_ задается внутри класса</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafa6383577405-11"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'cat'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <p>Названия атрибутов могут быть любыми. При этом, обратите внимание, чтобы избежать конфликта с названием встроенноей <strong>функции type()</strong>, мы снабдили наш атрибут символом нижнего подчеркивания <span id="urvanov-syntax-highlighter-672da521bafa8359633724" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline crayon-theme-familiar-my-copy crayon-theme-familiar-my-copy-inline urvanov-syntax-highlighter-font-consolas" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">_</span></span></span>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafaa347385826" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafaa347385826-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafaa347385826-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafaa347385826-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafaa347385826-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafaa347385826-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafaa347385826-1"><span class="crayon-c"># повторно создадим объект класса CatClass, передав ему параметр цвета шерсти</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafaa347385826-2"><span class="crayon-v">Matroskin</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-s">'gray'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafaa347385826-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafaa347385826-4"><span class="crayon-c"># и выведем атрибуты класса</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafaa347385826-5"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafac450676314" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafac450676314-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafac450676314-1">('gray', 'cat')</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h3 class="wp-block-heading" id="5-metody-klassa">Методы класса</h3> <p>Дополним наш класс возможностью выполнять определенные действия (то есть создадим методы класса).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafae812287235" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafae812287235-16">16</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-1"><span class="crayon-c"># перепишем класс CatClass</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-4"><span class="crayon-h"> </span><span class="crayon-c"># метод .__init__() и атрибуты оставим без изменений</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-6"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-7"><span class="crayon-e"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'cat'</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-8"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-9"><span class="crayon-h"> </span><span class="crayon-c"># однако добавим метод, который позволит коту мяукать</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-10"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">meow</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-11"><span class="crayon-h"> </span><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-i">i</span><span class="crayon-h"> </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-k ">range</span><span class="crayon-sy">(</span><span class="crayon-cn">3</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-12"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Мяу'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-13"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-14"><span class="crayon-h"> </span><span class="crayon-c"># и метод .info() для вывода информации об объекте</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafae812287235-15"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">info</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafae812287235-16"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0006 seconds] --> </div> <p>Вновь создадим объект и применим имеющиеся в классе методы.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafb1548621163" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb1548621163-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafb1548621163-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb1548621163-1"><span class="crayon-c"># создадим объект</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafb1548621163-2"><span class="crayon-v">Matroskin</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-s">'gray'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafb3300464700" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb3300464700-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafb3300464700-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb3300464700-1"><span class="crayon-c"># применим метод .meow()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafb3300464700-2"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-e">meow</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafb5682315304" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb5682315304-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafb5682315304-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb5682315304-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb5682315304-1">Мяу</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafb5682315304-2">Мяу</div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb5682315304-3">Мяу</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafb6330554103" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb6330554103-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafb6330554103-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb6330554103-1"><span class="crayon-c"># и метод .info()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafb6330554103-2"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-e">info</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafb8068712718" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafb8068712718-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafb8068712718-1">gray cat</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <h2 class="wp-block-heading" id="6-printsipy-obektno-orientirovannogo-programmirovaniya">Принципы объектно-ориентированного программирования</h2> <p>Продолжим изучать тему классов и объектов и рассмотрим некоторые принципы объектно-ориентированного программирования.</p> <h3 class="wp-block-heading" id="7-inkapsulyatsiya">Инкапсуляция</h3> <p><strong>Инкапсуляция</strong> (encapsulation) — это способность класса хранить данные и методы внутри себя. Другими словами, объект класса можно представить в виде <em>капсулы</em>, в которой содержатся необходимые данные и методы.</p> <h4 class="wp-block-heading" id="8-publichnye-i-chastnye-atributy-klassa">Публичные и частные атрибуты класса</h4> <p>С понятием инкапсуляции тесно связаны понятия <strong>публичных и частных атрибутов</strong> (public and private attributes). Публичные атрибуты — это те атрибуты, к которым можно получить доступ за пределами «капсулы» класса.</p> <p class="has-background" style="background-color:#ffe8c4">По умолчанию все атрибуты в Питоне публичные.</p> <p>Причем не просто получить доступ, но и изменить их.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafbb860628586" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbb860628586-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafbb860628586-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbb860628586-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafbb860628586-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbb860628586-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbb860628586-1"><span class="crayon-c"># изменим атрибут type_ объекта Matroskin на dog</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafbb860628586-2"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'dog'</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbb860628586-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafbb860628586-4"><span class="crayon-c"># выведем этот атрибут</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbb860628586-5"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">type_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafbd207988694" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbd207988694-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbd207988694-1">'dog'</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Согласитесь, это не очень разумно. Нам бы хотелось, чтобы объекты класса CatClass не изменяли значения атрибута type_. Другими словами, нам нужно сделать этот атрибут частным. Здесь есть два способа:</p> <ul class="wp-block-list"> <li><strong>Способ 1</strong>. Поставить <em>один</em> символ подчеркивания перед атрибутом и, таким образом, сообщить тем, кто будет пользоваться нашим кодом, что это частный атрибут.</li> </ul> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafbf682634427" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafbf682634427-7">7</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-1"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-2"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-3"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-4"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-5"><span class="crayon-h"> </span><span class="crayon-c"># символ подчеркивания ПЕРЕД названием атрибута указывает, </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-6"><span class="crayon-h"> </span><span class="crayon-c"># что это частный атрибут и изменять его не стоит</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafbf682634427-7"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">_type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'cat'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0006 seconds] --> </div> <p>К сожалению, это лишь частично решает проблему, потому что атрибут все равно можно изменить.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafc1403812020" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc1403812020-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-1"><span class="crayon-c"># вновь создадим объект класса CatClass</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-2"><span class="crayon-v">Matroskin</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-s">'gray'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-4"><span class="crayon-c"># и изменим значение атрибута _type_</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-5"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">_type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'dog'</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc1403812020-6"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">_type_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafc3674877495" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc3674877495-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc3674877495-1">'dog'</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <ul class="wp-block-list"> <li><strong>Способ 2</strong>. Поставить перед названием атрибута символ <em>двойного</em> подчеркивания. Теперь напрямую получить доступ к этому классу не получится.</li> </ul> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafc5175440448" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc5175440448-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-1"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-2"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-3"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-4"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-5"><span class="crayon-h"> </span><span class="crayon-c"># символ двойного подчеркивания предотвратит доступ извне</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc5175440448-6"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'cat'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafc7912486938" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc7912486938-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc7912486938-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafc7912486938-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafc7912486938-4">4</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc7912486938-1"><span class="crayon-v">Matroskin</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-s">'gray'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc7912486938-2"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafc7912486938-3"><span class="crayon-c"># теперь при вызове этого атрибута Питон выдаст ошибку</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafc7912486938-4"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">__type_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="304" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-1024x304.jpg" alt="ошибка при попытке обратиться к частному атрибуту" class="wp-image-10351" style="width:634px;height:188px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-1024x304.jpg 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-300x89.jpg 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-768x228.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-1536x455.jpg 1536w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-1200x356.jpg 1200w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error-600x178.jpg 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/02/private-attribute-error.jpg 1794w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>К сожалению, и это ограничение можно обойти, поставив <span id="urvanov-syntax-highlighter-672da521bafc9357839101" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline crayon-theme-familiar-my-copy crayon-theme-familiar-my-copy-inline urvanov-syntax-highlighter-font-consolas" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-i">_</span>НазваниеКласса</span></span> перед атрибутом.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafcb463360305" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcb463360305-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-1"><span class="crayon-c"># поставим _CatClass перед __type_,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-2"><span class="crayon-c"># изменим значение атрибута и</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-3"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">_CatClass__type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'dog'</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-4"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-5"><span class="crayon-c"># выведем его</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcb463360305-6"><span class="crayon-v">Matroskin</span><span class="crayon-sy">.</span><span class="crayon-v">_CatClass__type_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafcd615390921" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcd615390921-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcd615390921-1">'dog'</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h3 class="wp-block-heading" id="9-nasledovanie">Наследование</h3> <p>Принцип <strong>наследования</strong> (inheritance) предполагает, что один класс наследует атрибуты и методы другого. В этом случае, говорят про <strong>Родителя</strong> или <strong>Суперкласс</strong> (parent class, base class) и <strong>Потомка</strong> или <strong>Подкласс</strong> (child class, derived class).</p> <div class="wp-block-image"> <figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="918" height="685" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/inheritance.jpg" alt="наследование в ООП: родительский класс и класс-потомок" class="wp-image-11045" style="width:361px;height:269px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/inheritance.jpg 918w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/inheritance-300x224.jpg 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/inheritance-768x573.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/inheritance-600x448.jpg 600w" sizes="(max-width: 918px) 100vw, 918px" /></figure></div> <p class="has-background" style="background-color:#ffe8c4">Наследование позволяет быстро и без изменения родительского класса дополнять его функционал.</p> <p>Продолжим простую аналогию с животными, чтобы не думать про логику программы и сосредоточиться на принципах ООП и особенностях синтаксиса.</p> <h4 class="wp-block-heading" id="10-sozdanie-roditelskogo-klassa-i-klassa-potomka">Создание родительского класса и класса-потомка</h4> <p>Создадим класс Animal, который будет включать в себя наиболее общие свойства и поведение животных: вес и длину (атрибуты), а также способность питаться и спать (методы).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafcf600284948" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafcf600284948-17">17</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-1"><span class="crayon-c"># создадим класс Animal</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">Animal</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-4"><span class="crayon-h"> </span><span class="crayon-c"># пропишем метод .__init__() с двумя параметрами: вес (кг) и длина (см)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">weight</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">length</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-6"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-7"><span class="crayon-h"> </span><span class="crayon-c"># поместим аргументы этих параметров в соответствующие переменные</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-8"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">weight</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">weight</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-9"><span class="crayon-e"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">length</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">length</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-10"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-11"><span class="crayon-h"> </span><span class="crayon-c"># объявим методы .eat()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-12"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">eat</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-13"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Eating'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-14"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-15"><span class="crayon-h"> </span><span class="crayon-c"># и .sleep()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-16"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">sleep</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafcf600284948-17"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Sleeping'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <p>Теперь создадим класс-потомок Bird (птица). В него мы добавим возможность летать (метод).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafd2424970516" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd2424970516-9">9</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-1"><span class="crayon-c"># создадим класс Bird</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-2"><span class="crayon-c"># родительский класс Animal пропишем в скобках</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-3"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Bird</span><span class="crayon-sy">(</span><span class="crayon-v">Animal</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-4"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-5"><span class="crayon-h"> </span><span class="crayon-c"># внутри класса Bird объявим новый метод .move()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-6"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-7"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-8"><span class="crayon-h"> </span><span class="crayon-c"># для птиц .move() будет означать "летать"</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd2424970516-9"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Flying'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>Создадим объект pigeon (голубь).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafd4994612550" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd4994612550-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd4994612550-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd4994612550-1"><span class="crayon-c"># создадим объект pigeon и передадим ему значения веса и длины</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd4994612550-2"><span class="crayon-v">pigeon</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">Bird</span><span class="crayon-sy">(</span><span class="crayon-cn">0.3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>Мы можем посмотреть на атрибуты и методы, которые pigeon унаследовал у класса Animal.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafd6600848237" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd6600848237-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafd6600848237-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd6600848237-1"><span class="crayon-c"># посмотрим на унаследованные у класса Animal атрибуты</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafd6600848237-2"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-v">weight</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-v">length</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafd8867647384" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafd8867647384-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafd8867647384-1">(0.3, 30)</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafdd935917177" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafdd935917177-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafdd935917177-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafdd935917177-1"><span class="crayon-c"># и методы</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafdd935917177-2"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-e">eat</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafdf611307438" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafdf611307438-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafdf611307438-1">Eating</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Кроме того, мы можем вызвать метод, свойственный только классу Bird.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafe1970931260" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe1970931260-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe1970931260-1"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafe3112222438" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe3112222438-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe3112222438-1">Flying</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="11-funktsiya-super">Функция super()</h4> <p>Обратите внимание, в предыдущем примере класс Bird получил только новые методы, новых атрибутов в нем не появилось. Все дело в том, что если мы хотим добавить атрибут в классе-потомке, сохранив атрибуты родительского класса, нам нужно явным образом вызвать последние с помощью <strong>функции super()</strong>.</p> <p>Предположим, что в наш класс Bird мы хотим добавить не только метод .move(), но и атрибут flying_speed (скорость полета).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafe5255267246" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe5255267246-13">13</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-1"><span class="crayon-c"># снова создадим класс Bird</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Bird</span><span class="crayon-sy">(</span><span class="crayon-v">Animal</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-4"><span class="crayon-h"> </span><span class="crayon-c"># в метод .__init__() добавим параметр скорости полета (км/ч)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">weight</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">length</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">flying_speed</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-6"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-7"><span class="crayon-h"> </span><span class="crayon-c"># с помощью функции super() вызовем метод .__init__() родительского класса Animal</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-8"><span class="crayon-h"> </span><span class="crayon-k ">super</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-v">weight</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">length</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-9"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">flying_speed</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">flying</span><span class="crayon-sy">_</span>speed</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-10"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-11"><span class="crayon-h"> </span><span class="crayon-c"># вновь пропишем метод .move()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-12"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe5255267246-13"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Flying'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <p>Без функции <strong>super()</strong> класс Bird не знал бы откуда брать параметры weight и length.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafe7077802652" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe7077802652-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe7077802652-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe7077802652-1"><span class="crayon-c"># вновь создадим объект pigeon класса Bird, но уже с тремя параметрами</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe7077802652-2"><span class="crayon-v">pigeon</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">Bird</span><span class="crayon-sy">(</span><span class="crayon-cn">0.3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">100</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>У обновленного класса Bird появились собственные атрибуты.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafe9937015239" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafe9937015239-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafe9937015239-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafe9937015239-1"><span class="crayon-c"># вызовем как унаследованные, так и собственные атрибуты класса Bird</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafe9937015239-2"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-v">weight</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-v">length</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-v">flying_speed</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafeb865812877" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafeb865812877-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafeb865812877-1">(0.3, 30, 100)</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Как и раньше класс Bird унаследовал методы класса Animal и обзавелся собственным методом .move().</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafed620490219" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafed620490219-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bafed620490219-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafed620490219-1"><span class="crayon-c"># вызовем унаследованный метод .sleep()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bafed620490219-2"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-e">sleep</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bafef241767130" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bafef241767130-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bafef241767130-1">Sleeping</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baff1720266741" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff1720266741-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff1720266741-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff1720266741-1"><span class="crayon-c"># и собственный метод .move()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff1720266741-2"><span class="crayon-v">pigeon</span><span class="crayon-sy">.</span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baff3599712444" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff3599712444-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff3599712444-1">Flying</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="12-pereopredelenie-klassa">Переопределение класса</h4> <p>Интересной особенностью класса-потомка в Питоне является то, что он переопределяет (по сути, переписывает) родительский класс. Давайте создадим подкласс для нелетающих птиц Flightless, в котором:</p> <ol class="wp-block-list"> <li>Единственным атрибутом будет их скорость бега running_speed;</li> <li>А результат метода .move() мы заменим (что логично) с Flying на Running.</li> </ol> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baff5745476474" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff5745476474-12">12</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-1"><span class="crayon-c"># создадим подкласс Flightless класса Bird</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Flightless</span><span class="crayon-sy">(</span><span class="crayon-v">Bird</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-4"><span class="crayon-h"> </span><span class="crayon-c"># метод .__init__() этого подкласса "стирает" .__init__() родительского класса</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">running_speed</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-6"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-7"><span class="crayon-h"> </span><span class="crayon-c"># таким образом, у нас остается только один атрибут</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-8"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">running_speed</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">running</span><span class="crayon-sy">_</span>speed</div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-9"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-10"><span class="crayon-h"> </span><span class="crayon-c"># кроме того, результатом метода .move() будет 'Running'</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff5745476474-11"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff5745476474-12"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Running'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <p>Создадим объект ostrich (страус) класса Flightless.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baff7002047675" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff7002047675-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff7002047675-1"><span class="crayon-v">ostrich</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">Flightless</span><span class="crayon-sy">(</span><span class="crayon-cn">60</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>Посмотрим на значение атрибута скорости.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baff9814639371" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baff9814639371-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521baff9814639371-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baff9814639371-1"><span class="crayon-c"># страусы бегают довольно быстро</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521baff9814639371-2"><span class="crayon-v">ostrich</span><span class="crayon-sy">.</span><span class="crayon-v">running_speed</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521baffb933546591" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521baffb933546591-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521baffb933546591-1">60</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Теперь посмотрим, переопределился ли метод <strong>.move()</strong>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb005963389090" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb005963389090-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb005963389090-1"><span class="crayon-v">ostrich</span><span class="crayon-sy">.</span><span class="crayon-e">move</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb008337524305" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb008337524305-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb008337524305-1">Running</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Важно отметить, что в отличие от атрибутов, которые не наследуются автоматически (как мы видели, для этого нужно использовать функцию <strong>super()</strong>), методы всех родительских классов (в данном случае Animal —> Bird) передаются потомкам.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb00a096859859" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb00a096859859-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb00a096859859-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb00a096859859-1"><span class="crayon-c"># применим метод .eat() класса Animal</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb00a096859859-2"><span class="crayon-v">ostrich</span><span class="crayon-sy">.</span><span class="crayon-e">eat</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb00c024631003" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb00c024631003-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb00c024631003-1">Eating</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="13-mnozhestvennoe-nasledovanie">Множественное наследование</h4> <p>Питон позволяет классу наследовать методы двух и более классов.</p> <div class="wp-block-image"> <figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="431" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-1024x431.jpg" alt="объектно-ориентированный подход: множественное наследование" class="wp-image-11046" style="width:555px;height:233px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-1024x431.jpg 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-300x126.jpg 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-768x323.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-1536x647.jpg 1536w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-1200x505.jpg 1200w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance-600x253.jpg 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/mult-inheritance.jpg 1829w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div> <p>Предположим, что мы хотим создать класс SwimmingBird (водоплавающая птица) и взять методы плавания и полета у двух разных родительских классов, а именно Fish и Bird.</p> <p>Вначале создадим родительские классы и необходимые нам методы.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb00e107281744" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb00e107281744-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-1"><span class="crayon-c"># создадим родительский класс Fish</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">Fish</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-4"><span class="crayon-h"> </span><span class="crayon-c"># и метод .swim()</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">swim</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb00e107281744-6"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Swimming'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb010291638783" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb010291638783-6">6</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb010291638783-1"><span class="crayon-c"># и еще один родительский класс Bird</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb010291638783-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">Bird</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb010291638783-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb010291638783-4"><span class="crayon-h"> </span><span class="crayon-c"># и метод .fly()</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb010291638783-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">fly</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb010291638783-6"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Flying'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>Теперь перейдем к классу-потомку.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb012940157156" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb012940157156-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb012940157156-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb012940157156-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb012940157156-1"><span class="crayon-c"># родительские классы мы перечисляем в скобках через зяпятую</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb012940157156-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">SwimmingBird</span><span class="crayon-sy">(</span><span class="crayon-v">Bird</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">Fish</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb012940157156-3"><span class="crayon-h"> </span><span class="crayon-r">pass</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>Создадим объект duck (утка) класса SwimmingBird.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb014813010431" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb014813010431-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb014813010431-1"><span class="crayon-v">duck</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">SwimmingBird</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>Как мы видим, утка умеет как летать, так и плавать.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb016713070857" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb016713070857-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb016713070857-1"><span class="crayon-v">duck</span><span class="crayon-sy">.</span><span class="crayon-e">fly</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb018119445310" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb018119445310-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb018119445310-1">Flying</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb019096627543" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb019096627543-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb019096627543-1"><span class="crayon-v">duck</span><span class="crayon-sy">.</span><span class="crayon-e">swim</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb01b930480487" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb01b930480487-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb01b930480487-1">Swimming</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h3 class="wp-block-heading" id="14-polimorfizm">Полиморфизм</h3> <p><strong>Полиморфизм</strong> (polymorphism) означает, что один и тот же объект может принимать разные формы. В программировании, полиморфизм предполагает, что операторы, функции и объекты могут взаимодействовать с различными типами данных.</p> <p>Например, оператор <span id="urvanov-syntax-highlighter-672da521bb01d617337356" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline crayon-theme-familiar-my-copy crayon-theme-familiar-my-copy-inline urvanov-syntax-highlighter-font-consolas" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 16px !important; line-height: 22px !important;font-size: 16px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">+</span></span></span> в случае чисел предполагает <a href="https://www.dmitrymakarov.ru/python/data-types-02/#2-operatsii-s-chislami">сложение</a>, а в случае строк — их <a href="https://www.dmitrymakarov.ru/python/data-types-02/#6-obedinenie-strok">объединение</a>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb01f428477539" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb01f428477539-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb01f428477539-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb01f428477539-1"><span class="crayon-c"># для чисел '+' является оператором сложения</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb01f428477539-2"><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">2</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb021325908636" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb021325908636-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb021325908636-1">4</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb023043735585" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb023043735585-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb023043735585-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb023043735585-1"><span class="crayon-c"># для строк - оператором объединения</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb023043735585-2"><span class="crayon-s">'классы'</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-s">' и '</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-s">'объекты'</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb025800723710" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb025800723710-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb025800723710-1">'классы и объекты'</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="15-polimorfizm-funktsiy">Полиморфизм функций</h4> <p>Полиморфные функции (polymorphic functions) — это функции, которые могут работать с разными типами данных. Классическим примером является встроенная <strong>функция len()</strong>.</p> <p>Ее можно применить к строке, списку, словарю или, например, массиву Numpy.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb027879597937" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb027879597937-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb027879597937-1"><span class="crayon-k ">len</span><span class="crayon-sy">(</span><span class="crayon-s">'Программирование на Питоне'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb029318283122" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb029318283122-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb029318283122-1">26</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb02b620383019" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb02b620383019-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb02b620383019-1"><span class="crayon-k ">len</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-s">'Программирование'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'на'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'Питоне'</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb02d158954408" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb02d158954408-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb02d158954408-1">3</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb02f565862981" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb02f565862981-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb02f565862981-1"><span class="crayon-k ">len</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Программирование'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'на'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Питоне'</span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb031163079458" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb031163079458-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb031163079458-1">3</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb033655636111" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb033655636111-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb033655636111-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb033655636111-1"><span class="crayon-r">import</span><span class="crayon-h"> </span><span class="crayon-e">numpy </span><span class="crayon-st">as</span><span class="crayon-h"> </span><span class="crayon-e">np</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb033655636111-2"><span class="crayon-k ">len</span><span class="crayon-sy">(</span><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-k ">array</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">3</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb035709300155" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb035709300155-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb035709300155-1">3</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="16-polimorfizm-klassov">Полиморфизм классов</h4> <p>Полиморфизм классов (class polymorphism) предполагает, что у разных (не связанных друг с другом) классов могут быть методы с одинаковыми названиями.</p> <p>Пропишем два класса Cat и Dog и наделим их схожими атрибутами и методами:</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb037577695297" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb037577695297-16">16</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-1"><span class="crayon-c"># создадим класс котов</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">CatClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-4"><span class="crayon-h"> </span><span class="crayon-c"># определим атрибуты клички, типа и цвета шерсти</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-6"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">name</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-7"><span class="crayon-e"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">_type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'кот'</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-8"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-9"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-10"><span class="crayon-h"> </span><span class="crayon-c"># создадим метод .info() для вывода этих атрибутов</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-11"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">info</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-12"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-i">f</span><span class="crayon-s">'Меня зовут {self.name}, я {self._type_}, цвет моей шерсти {self.color}'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-13"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-14"><span class="crayon-h"> </span><span class="crayon-c"># и метод .sound(), показывающий, что коты умеют мяукать</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb037577695297-15"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">sound</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb037577695297-16"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Я умею мяукать'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb039741567176" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb039741567176-16">16</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-1"><span class="crayon-c"># создадим класс собак</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">DogClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-4"><span class="crayon-h"> </span><span class="crayon-c"># с такими же атрибутами</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-6"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">name</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-7"><span class="crayon-e"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">_type_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'пес'</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-8"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">color</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">color</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-9"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-10"><span class="crayon-h"> </span><span class="crayon-c"># и методами</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-11"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">info</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-12"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-i">f</span><span class="crayon-s">'Меня зовут {self.name}, я {self._type_}, цвет моей шерсти {self.color}'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-13"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-14"><span class="crayon-h"> </span><span class="crayon-c"># хотя, обратите внимание, действия внутри методов отличаются</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb039741567176-15"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">sound</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb039741567176-16"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'Я умею лаять'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0005 seconds] --> </div> <p>Создадим объекты этих классов.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb03b406225184" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03b406225184-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb03b406225184-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03b406225184-1"><span class="crayon-v">cat</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">CatClass</span><span class="crayon-sy">(</span><span class="crayon-s">'Бегемот'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'черный'</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb03b406225184-2"><span class="crayon-v">dog</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">DogClass</span><span class="crayon-sy">(</span><span class="crayon-s">'Барбос'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'серый'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>Поместим объекты в кортеж и в цикле for вызовем атрибуты и методы каждого из классов.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb03d167506718" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03d167506718-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb03d167506718-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03d167506718-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb03d167506718-4">4</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03d167506718-1"><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-e">animal </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">cat</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">dog</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb03d167506718-2"><span class="crayon-h"> </span><span class="crayon-v">animal</span><span class="crayon-sy">.</span><span class="crayon-e">info</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03d167506718-3"><span class="crayon-h"> </span><span class="crayon-v">animal</span><span class="crayon-sy">.</span><span class="crayon-e">sound</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb03d167506718-4"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb03e305007181" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03e305007181-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb03e305007181-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03e305007181-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb03e305007181-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb03e305007181-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03e305007181-1">Меня зовут Бегемот, я кот, цвет моей шерсти черный</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb03e305007181-2">Я умею мяукать</div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03e305007181-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb03e305007181-4">Меня зовут Барбос, я пес, цвет моей шерсти серый</div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb03e305007181-5">Я умею лаять</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h2 class="wp-block-heading" id="17-paradigma-programmirovaniya">Парадигма программирования</h2> <p>Парадигма программирования — это, по большому счету, способ организации и стиль написания кода. Создание различных парадигм необходимо для того, чтобы справиться со все возрастающей сложностью компьютерных программ.</p> <div class="wp-block-image"> <figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="704" height="535" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/programming-paradigms.png" alt="парадигмы программирования: императивный и декларативный подходы" class="wp-image-10919" style="width:562px;height:427px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/programming-paradigms.png 704w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/programming-paradigms-300x228.png 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/programming-paradigms-600x456.png 600w" sizes="(max-width: 704px) 100vw, 704px" /></figure></div> <p>Как вы видите на схеме выше, парадигмы программирования можно разделить на две большие группы: императивное и декларативное программирование.</p> <h3 class="wp-block-heading" id="18-imperativnoe-i-deklarativnoe-programmirovanie">Императивное и декларативное программирование</h3> <p><strong>Императивное программирование</strong> (imperative programming), как и предполагает его название (от латинского imperare, «властвовать», «повелевать»), явным образом говорит компьютеру, <em>что нужно сделать</em>. Другими словами, мы пишем инструкцию, и компьютер строчка за строчкой ее исполняет.</p> <p><strong>Декларативный подход</strong> (declarative programming) отличается тем, что детали выполнения программы нас не интересуют, для нас важно лишь объяснить компьютеру, <em>какой результат мы хотим получить</em>.</p> <p>Языки программирования, соответственно, можно разделить на императивные (например, C или Питон) и декларативные (SQL, Haskell). Впрочем, такое деление во многом условно, и чуть дальше я покажу вам, что мы, например, уже использовали декларативную парадигму внутри Питона.</p> <p>Однако, обо всем по порядку.</p> <h3 class="wp-block-heading" id="19-protsedurnoe-programmirovanie">Процедурное программирование</h3> <p>Внутри императивного программирования выделяют <strong>процедурное программирование</strong> (procedural programming). По большом счету, это обычное программирование, которым мы занимались до сегодняшнего занятия. Ставим задачу и последовательно через набор инструкций приходим к нужному решению.</p> <figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="804" height="975" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/procedural.jpg" alt="процедурное программирование: последовательность команд" class="wp-image-11048" style="width:255px;height:309px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/procedural.jpg 804w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/procedural-247x300.jpg 247w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/procedural-768x931.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/procedural-600x728.jpg 600w" sizes="(max-width: 804px) 100vw, 804px" /></figure> <p>Например, у нас есть список словарей с данными пациентов, и нам нужно посчитать их средний рост.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb041152798107" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb041152798107-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb041152798107-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb041152798107-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb041152798107-1"><span class="crayon-v">patients</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-sy">{</span><span class="crayon-s">'name'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Николай'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'height'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">178</span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb041152798107-2"><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-s">'name'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Иван'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'height'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">182</span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb041152798107-3"><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-s">'name'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Алексей'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'height'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">190</span><span class="crayon-sy">}</span><span class="crayon-sy">]</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <p>В соответствии с процедурным подходом мы могли бы использовать циклы for.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb043339246899" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb043339246899-13">13</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-1"><span class="crayon-c"># создадим переменные для общего роста и количества пациентов</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-2"><span class="crayon-v">total</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">count</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">0</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-4"><span class="crayon-c"># в цикле for пройдемся по пациентам (отдельным словарям)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-5"><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-e">patient </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-v">patients</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-6"><span class="crayon-h"> </span><span class="crayon-c"># достанем значение роста и прибавим к текущему значению переменной total</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-7"><span class="crayon-h"> </span><span class="crayon-v">total</span><span class="crayon-h"> </span><span class="crayon-o">+=</span><span class="crayon-h"> </span><span class="crayon-v">patient</span><span class="crayon-sy">[</span><span class="crayon-s">'height'</span><span class="crayon-sy">]</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-8"><span class="crayon-h"> </span><span class="crayon-c"># на каждой итерации будем увеличивать счетчик пациентов на один</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-9"><span class="crayon-h"> </span><span class="crayon-v">count</span><span class="crayon-h"> </span><span class="crayon-o">+=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-10"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-11"><span class="crayon-c"># разделим общий рост на количество пациентов, </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb043339246899-12"><span class="crayon-c"># чтобы получить среднее значение</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb043339246899-13"><span class="crayon-v">total</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-v">count</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb045745993382" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb045745993382-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb045745993382-1">183.33333333333334</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Впрочем, когда кода и людей его разрабатывающих становится слишком много, мы довольно быстро сталкиваемся с недостатками такого подхода. Структура кода становится не очевидной, найти ошибку бывает все сложнее и сложнее.</p> <p>Здесь на помощь приходят классы.</p> <h3 class="wp-block-heading" id="20-obektno-orientirovannoe-programmirovanie">Объектно-ориентированное программирование</h3> <p>В мире <strong>ООП</strong> все задачи решаются не одной большой программой, а классами (и созданными на их основе объектами). Под каждую задачу создается, как правило, отдельный класс. И хотя поначалу использование классов может показаться довольно сложным, на самом деле это существенно упрощает решение многих задач.</p> <figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop-1024x768.jpg" alt="создание объектов класса на Питоне" class="wp-image-11050" style="width:385px;height:289px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop-1024x768.jpg 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop-300x225.jpg 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop-768x576.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop-600x450.jpg 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/oop.jpg 1090w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>Более того, изученные выше принципы объектно-ориентированного подхода, а именно инкапсуляция, наследование и полиморфизм еще больше способствуют грамотной организации кода.</p> <p>Предложенную задачу о среднем росте можно решить и с помощью класса.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb048293314941" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-22">22</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-23">23</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-24">24</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-25">25</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-26">26</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-27">27</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-28">28</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb048293314941-29">29</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-1"><span class="crayon-c"># создадим класс для работы с данными DataClass</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-2"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-v">DataClass</span><span class="crayon-o">:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-3"><span class="crayon-h"> </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-4"><span class="crayon-h"> </span><span class="crayon-c"># при создании объекта будем передавать ему данные для анализа</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-5"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">__init__</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-6"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">data</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-7"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-8"><span class="crayon-h"> </span><span class="crayon-c"># кроме того, создадим метод для расчета среднего значения</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-9"><span class="crayon-h"> </span><span class="crayon-r">def</span><span class="crayon-h"> </span><span class="crayon-e">count_average</span><span class="crayon-sy">(</span><span class="crayon-r">self</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">metric</span><span class="crayon-sy">)</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-10"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-11"><span class="crayon-h"> </span><span class="crayon-c"># параметр metric определит, по какому столбцу считать среднее</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-12"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">metric</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">metric</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-13"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-14"><span class="crayon-h"> </span><span class="crayon-c"># объявим два частных атрибута</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-15"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__total</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-16"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__count</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-17"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-18"><span class="crayon-h"> </span><span class="crayon-c"># в цикле for пройдемся по списку словарей</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-19"><span class="crayon-h"> </span><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-e">item </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-o">:</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-20"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-21"><span class="crayon-h"> </span><span class="crayon-c"># рассчитем общую сумму по указанному в metric </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-22"><span class="crayon-h"> </span><span class="crayon-c"># значению каждого словаря</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-23"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__total</span><span class="crayon-h"> </span><span class="crayon-o">+=</span><span class="crayon-h"> </span><span class="crayon-v">item</span><span class="crayon-sy">[</span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">metric</span><span class="crayon-sy">]</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-24"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-25"><span class="crayon-h"> </span><span class="crayon-c"># и количество таких записей</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-26"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__count</span><span class="crayon-h"> </span><span class="crayon-o">+=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-27"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb048293314941-28"><span class="crayon-h"> </span><span class="crayon-c"># разделим общую сумму показателя на количество записей</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb048293314941-29"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__total</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">__count</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0007 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb04a217798269" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04a217798269-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb04a217798269-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04a217798269-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb04a217798269-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04a217798269-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04a217798269-1"><span class="crayon-c"># создадим объект класса DataClass и передадим ему данные о пациентах</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb04a217798269-2"><span class="crayon-v">data_object</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">DataClass</span><span class="crayon-sy">(</span><span class="crayon-v">patients</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04a217798269-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb04a217798269-4"><span class="crayon-c"># вызовем метод .count_average() с метрикой 'height'</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04a217798269-5"><span class="crayon-v">data_object</span><span class="crayon-sy">.</span><span class="crayon-e">count_average</span><span class="crayon-sy">(</span><span class="crayon-s">'height'</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb04c688821660" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04c688821660-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04c688821660-1">183.33333333333334</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Впрочем, вы возможно заметили, что в данном случае использование класса не выглядит слишком логично. Задачи по обработке и анализу данных довольно удобно решать с помощью функционального программирования.</p> <h3 class="wp-block-heading" id="21-funktsionalnoe-programmirovanie">Функциональное программирование</h3> <p>По большому счету, <strong>функциональное программирование</strong> (functional programming) — это набор функций, которые последовательно решают поставленную задачу. Результат работы одной функции становится входящим параметром для другой.</p> <figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="477" src="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-1024x477.jpg" alt="функциональное программирование" class="wp-image-11051" style="width:483px;height:225px" srcset="https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-1024x477.jpg 1024w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-300x140.jpg 300w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-768x358.jpg 768w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-1536x715.jpg 1536w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-1200x559.jpg 1200w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional-600x279.jpg 600w, https://www.dmitrymakarov.ru/wp-content/uploads/2022/03/functional.jpg 1596w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure> <p>Преимуществом является то, что вы четко разделяете функции, их параметры и передаваемые им данные. Это зачастую упрощает понимание логики программы и поиск ошибок.</p> <h4 class="wp-block-heading" id="22-reshenie-cherez-funktsionalnyy-podkhod">Решение через функциональный подход</h4> <p>В частности, решим поставленную выше задачу, вначале последовательно применив несколько функций (<a href="https://www.dmitrymakarov.ru/python/functions-06/#12-anonimnye-ili-lambda-funktsii">lambda-функцию</a>, <a href="https://www.dmitrymakarov.ru/python/dict-08/#15-lambda-funktsiya-funktsii-map-i-zip">функцию map()</a> и функцию list()) к словарю с данными о пациентах.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb04e522068833" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04e522068833-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb04e522068833-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04e522068833-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb04e522068833-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb04e522068833-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04e522068833-1"><span class="crayon-c"># lambda-функция достанет значение по ключу height</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb04e522068833-2"><span class="crayon-c"># функция map() применит lambda-функцию к каждому вложенному в patients словарю</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04e522068833-3"><span class="crayon-c"># функция list() преобразует результат в список</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb04e522068833-4"><span class="crayon-v">heights</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-k ">list</span><span class="crayon-sy">(</span><span class="crayon-k ">map</span><span class="crayon-sy">(</span><span class="crayon-r">lambda</span><span class="crayon-h"> </span><span class="crayon-v">x</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">x</span><span class="crayon-sy">[</span><span class="crayon-s">'height'</span><span class="crayon-sy">]</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">patients</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb04e522068833-5"><span class="crayon-v">heights</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb050339752472" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb050339752472-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb050339752472-1">[178, 182, 190]</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>После получения значений роста остается применить функции sum() и len() для расчета среднего значения.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb052926882819" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb052926882819-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb052926882819-1"><span class="crayon-k ">sum</span><span class="crayon-sy">(</span><span class="crayon-v">heights</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-k ">len</span><span class="crayon-sy">(</span><span class="crayon-v">heights</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb054009993908" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb054009993908-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb054009993908-1">183.33333333333334</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="23-funktsiya-einsum">Функция einsum()</h4> <p>Еще одним примером функционального программирования является <a href="https://www.dmitrymakarov.ru/python/npmath-10/#33-soglashenie-eynshteyna-i-funktsiya-npeinsum">функция einsum()</a>. В данном случае мы берем два массива и описываем по каким правилам хотим их преобразовать.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb056552511274" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb056552511274-7">7</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb056552511274-1"><span class="crayon-c"># возьмем два двумерных массива</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb056552511274-2"><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-k ">array</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">]</span><span class="crayon-sy">,</span><span class="crayon-h"> </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb056552511274-3"><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">5</span><span class="crayon-sy">]</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb056552511274-4"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb056552511274-5"><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-k ">array</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-sy">[</span><span class="crayon-cn">5</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">4</span><span class="crayon-sy">]</span><span class="crayon-sy">,</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb056552511274-6"><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">]</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb056552511274-7"><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb059830209992" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb059830209992-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb059830209992-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb059830209992-1"><span class="crayon-c"># перемножим a и b по индексу j через функцию np.einsum()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb059830209992-2"><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-e">einsum</span><span class="crayon-sy">(</span><span class="crayon-s">'ij, jk -> ik'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">a</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">b</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb05b621430629" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb05b621430629-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb05b621430629-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb05b621430629-1">array([[ 5, 2],</div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb05b621430629-2"> [32, 20]])</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h4 class="wp-block-heading" id="24-funktsionalnoe-programmirovanie-na-r">Функциональное программирование на R</h4> <p>R — это декларативный функциональный язык, специально созданный для обработки данных и статистических исследований. Если Питон в основном применяется для решения задач бизнеса, то R чаще используется в науке.</p> <p>На языке R большая часть задач решается с помощью функций, которые последовательно преобразуют передаваемые им данные. Рассмотрим вот такой пример подсчета количества мальчиков по имени Тейлор в датасете babynames.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb05d824281190" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb05d824281190-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb05d824281190-1"><span class="crayon-e">sum</span><span class="crayon-sy">(</span><span class="crayon-e">select</span><span class="crayon-sy">(</span><span class="crayon-e">filter</span><span class="crayon-sy">(</span><span class="crayon-v">babynames</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">sex</span><span class="crayon-h"> </span><span class="crayon-o">==</span><span class="crayon-h"> </span><span class="crayon-s">"M"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-h"> </span><span class="crayon-o">==</span><span class="crayon-h"> </span><span class="crayon-s">"Taylor"</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">n</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0007 seconds] --> </div> <p>Даже если вы первый раз видите код на R довольно несложно догадаться, что в данном случае мы (1) с помощью функции filter() находим мальчиков по имени Тейлор в датасете babynames, затем (2) отбираем только эти строки через select() и (3) наконец складываем результат.</p> <p>Ту же самую задачу можно реализовать через еще более «функциональный» код с использованием оператора %>% (<strong>pipeline operator</strong>).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb05f226096507" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb05f226096507-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb05f226096507-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb05f226096507-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb05f226096507-4">4</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb05f226096507-1"><span class="crayon-c"># в таком виде последовательность становится еще более наглядной</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb05f226096507-2"><span class="crayon-v">babynames</span><span class="crayon-h"> </span><span class="crayon-o">%</span><span class="crayon-o">></span><span class="crayon-o">%</span><span class="crayon-h"> </span><span class="crayon-e">filter</span><span class="crayon-sy">(</span><span class="crayon-v">sex</span><span class="crayon-h"> </span><span class="crayon-o">==</span><span class="crayon-h"> </span><span class="crayon-s">"M"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-h"> </span><span class="crayon-o">==</span><span class="crayon-h"> </span><span class="crayon-s">"Taylor"</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">%</span><span class="crayon-o">></span><span class="crayon-o">%</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb05f226096507-3"><span class="crayon-h"> </span><span class="crayon-e">select</span><span class="crayon-sy">(</span><span class="crayon-v">n</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">%</span><span class="crayon-o">></span><span class="crayon-o">%</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb05f226096507-4"><span class="crayon-h"> </span><span class="crayon-v">sum</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>По сути мы создали пайплайн (то есть последовательность операций), где каждый шаг решается определенной функцией.</p> <p>Для первого знакомства с парадигмами программирования полученных знаний будет достаточно. Логическое и математическое (линейное и нелинейное) программирование останутся за рамками сегодняшнего занятия.</p> <h2 class="wp-block-heading" id="25-klassy-i-obekty-v-mashinnom-obuchenii">Классы и объекты в машинном обучении</h2> <p>Мы только что изучили, как объектно-ориентированное программирование встраивается в другие парадигмы. Теперь давайте посмотрим, как применять ООП в машинном обучении.</p> <h3 class="wp-block-heading" id="26-gotovye-klassy-biblioteki-sklearn">Готовые классы библиотеки sklearn</h3> <p>На самом деле мы уже активно использовали классы и объекты, когда работали, в частности, с библиотекой sklearn. Эта библиотека состоит из классов, которые способны решать самые разные задачи (и здесь, надо сказать, объектно-ориентированная парадигма подходит как нельзя лучше).</p> <p>Напомню про некоторые из них:</p> <ul class="wp-block-list"> <li>На занятии по <a href="https://www.dmitrymakarov.ru/intro/regression-14/">линейной регрессии</a> мы использовали класс LinearRegression;</li> <li>Изучая <a href="https://www.dmitrymakarov.ru/intro/classification-15/">классификацию</a>, применяли класс LogisticRegression;</li> <li>В рамках <a href="https://www.dmitrymakarov.ru/intro/clustering-16/">кластерного анализа</a> нам понадобился класс KMeans.</li> </ul> <p class="has-background" style="background-color:#ffe8c4">Полный перечень можно найти в <a href="https://scikit-learn.org/stable/modules/classes.html" target="_blank" rel="noreferrer noopener">документации</a>⧉ библиотеки sklearn.</p> <p>Вспомним, как применялся, например, класс LinearRegression. Возьмем знакомые нам данные роста и обхвата шеи.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb061192378916" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb061192378916-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb061192378916-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb061192378916-1"><span class="crayon-v">X</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-k ">array</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-cn">1.48</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.49</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.49</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.50</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.51</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.52</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.52</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.53</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.53</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.54</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.55</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.56</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.57</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.57</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.58</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.58</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.59</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.60</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.61</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.62</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.63</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.64</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.65</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.65</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.66</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.67</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.67</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.68</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.68</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.69</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.70</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.70</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.71</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.71</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.71</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.74</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.75</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.76</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.77</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.77</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1.78</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb061192378916-2"><span class="crayon-v">y</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">np</span><span class="crayon-sy">.</span><span class="crayon-k ">array</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-cn">29.1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.2</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.6</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.9</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.6</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.7</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">30.9</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.2</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">32.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">31.9</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">32.4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">32.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">32.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">33.3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">33.6</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">33.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">33.9</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">33.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">35.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">34.5</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">34.7</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">34.6</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">34.2</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">34.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">35.5</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.2</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.6</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">37.0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">38.5</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0022 seconds] --> </div> <p>Как мы помним sklearn требует, чтобы признаки содержались в двумерном массиве.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb064124211450" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb064124211450-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb064124211450-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb064124211450-1"><span class="crayon-c"># преобразуем данные роста в двумерный массив</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb064124211450-2"><span class="crayon-v">X_2D</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">X</span><span class="crayon-sy">.</span><span class="crayon-e">reshape</span><span class="crayon-sy">(</span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0002 seconds] --> </div> <p>Теперь импортиртируем класс LinearRegression и создадим объект этого класса.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb066768205788" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb066768205788-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb066768205788-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb066768205788-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb066768205788-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb066768205788-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb066768205788-1"><span class="crayon-c"># из набора линейных моделей библиотеки sklearn импортируем линейную регрессию</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb066768205788-2"><span class="crayon-st">from</span><span class="crayon-h"> </span><span class="crayon-v">sklearn</span><span class="crayon-sy">.</span><span class="crayon-e">linear_model </span><span class="crayon-r">import</span><span class="crayon-h"> </span><span class="crayon-i">LinearRegression</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb066768205788-3"><span class="crayon-h"> </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb066768205788-4"><span class="crayon-c"># создадим объект этого класса и запишем в переменную model</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb066768205788-5"><span class="crayon-v">model</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">LinearRegression</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <p>Обучим модель с помощью метода <strong>.fit()</strong> и посмотрим на коэффициенты (атрибуты).</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb068430163133" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb068430163133-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb068430163133-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb068430163133-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb068430163133-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb068430163133-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb068430163133-1"><span class="crayon-c"># обучим модель с помощью метода .fit(), которому передадим наши данные</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb068430163133-2"><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-e">fit</span><span class="crayon-sy">(</span><span class="crayon-v">X_2D</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">y</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb068430163133-3"><span class="crayon-h"> </span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb068430163133-4"><span class="crayon-c"># на выходе получим коэффициенты линейной регрессии</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb068430163133-5"><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-v">coef_</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-v">intercept_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb06a035976896" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb06a035976896-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb06a035976896-1">(array([26.86181201]), -10.570936299787334)</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Теперь сделаем прогноз через <strong>.predict()</strong>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb06c766988635" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb06c766988635-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb06c766988635-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb06c766988635-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb06c766988635-1"><span class="crayon-c"># построим прогноз и выведем первые пять значений</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb06c766988635-2"><span class="crayon-v">y_pred</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-e">predict</span><span class="crayon-sy">(</span><span class="crayon-v">X_2D</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb06c766988635-3"><span class="crayon-v">y_pred</span><span class="crayon-sy">[</span><span class="crayon-o">:</span><span class="crayon-cn">5</span><span class="crayon-sy">]</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb06e208096502" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb06e208096502-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb06e208096502-1">array([29.18454547, 29.45316359, 29.45316359, 29.72178171, 29.99039983])</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h3 class="wp-block-heading" id="27-primer-oop-sobstvennyy-klass-lineynoy-regressii">Пример ООП: собственный класс линейной регрессии</h3> <p>Давайте дополнительно попрактикуемся в создании классов и реализуем модель линейной регрессии, аналогичную классу LinearRegression в библиотеке sklearn. В частности, создадим класс, который мы назовем SimpleLinearRegression, для нахождения коэффициентов простой линейной регрессии. Напомню, уравнение простой линейной регрессии имеет вид</p> <p>$$ y = w \cdot x + b $$</p> <p>Для уравнения с одной переменной аналитическое решение (closed-form solution) может быть найдено через метод наименьших квадратов (МНК, least squares method) по формулам ниже</p> <p>$$ w = \frac {\sum_{i = 1}^{n} (x_i-\bar{x})(y_i-\bar{y})} {\sum_{i = 1}^{n} (x_i-\bar{x})^2} $$</p> <p>$$ b = \bar{y}-w\bar{x} $$</p> <p class="has-background" style="background-color:#ffe8c4">Подробнее про метод наименьших квадратов мы будем говорить на последующих курсах.</p> <p>Напишем класс SimpleLinearRegression и снабдим его методами <strong>.fit()</strong> и <strong>.predict()</strong>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb070911284329" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-5">5</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-7">7</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-9">9</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-11">11</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-12">12</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-13">13</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-14">14</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-15">15</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-16">16</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-17">17</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-18">18</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-19">19</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-20">20</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-21">21</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-22">22</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-23">23</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-24">24</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-25">25</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-26">26</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-27">27</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-28">28</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-29">29</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-30">30</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-31">31</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-32">32</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-33">33</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-34">34</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-35">35</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-36">36</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-37">37</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-38">38</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-39">39</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-40">40</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-41">41</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-42">42</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-43">43</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-44">44</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb070911284329-45">45</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size: … [Строка слишком длинная. Вы можете скачать файл] </tr> </table> </div> </div> <!-- [Format Time: 0.0025 seconds] --> </div> <p>Создадим объект этого класса.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb072846870557" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb072846870557-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb072846870557-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb072846870557-1"><span class="crayon-c"># создадим объект класса SimpleLinearRegression</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb072846870557-2"><span class="crayon-v">model</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">SimpleLinearRegression</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>Обучим модель и посмотрим на коэффициенты.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb074133894634" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb074133894634-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb074133894634-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb074133894634-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb074133894634-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb074133894634-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb074133894634-1"><span class="crayon-c"># применим метод .fit()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb074133894634-2"><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-e">fit</span><span class="crayon-sy">(</span><span class="crayon-v">X</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">y</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb074133894634-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb074133894634-4"><span class="crayon-c"># посмотрим на коэффициенты</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb074133894634-5"><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-v">slope_</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-v">intercept_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb076759175035" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb076759175035-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb076759175035-1">(26.861812005569753, -10.570936299787313)</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <p>Остается сделать прогноз.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb078119012022" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb078119012022-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb078119012022-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb078119012022-3">3</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb078119012022-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb078119012022-5">5</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb078119012022-1"><span class="crayon-c"># сделаем прогноз через .predict()</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb078119012022-2"><span class="crayon-v">y_pred</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">model</span><span class="crayon-sy">.</span><span class="crayon-e">predict</span><span class="crayon-sy">(</span><span class="crayon-v">X</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb078119012022-3"> </div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb078119012022-4"><span class="crayon-c"># и выведем первые пять коэффициентов</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb078119012022-5"><span class="crayon-v">y_pred</span><span class="crayon-sy">[</span><span class="crayon-o">:</span><span class="crayon-cn">5</span><span class="crayon-sy">]</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> </div> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb07a751311602" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb07a751311602-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb07a751311602-1">array([29.18454547, 29.45316359, 29.45316359, 29.72178171, 29.99039983])</div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0000 seconds] --> </div> <h3 class="wp-block-heading" id="28-para-vazhnykh-detaley">Пара важных деталей</h3> <p>Обратим внимание на два нюанса, при несоблюдении которых Питон может выдать ошибку.</p> <h4 class="wp-block-heading" id="29-atributy-klassa-i-lokalnye-peremennye-metodov">Атрибуты класса и локальные переменные методов</h4> <p>В <strong>методе .__init__()</strong> мы объявили два атрибута класса <strong>.self.slope_</strong> и <strong>.self.intercept_</strong>. После этого в <strong>методе .fit()</strong> мы объявили <a href="https://www.dmitrymakarov.ru/python/functions-06/#12-globalnye-i-lokalnye-peremennye">локальные переменные</a> <strong>slope_</strong> и <strong>intercept_</strong>. Рассчитав сдвиг и наклон прямой, мы записали эти значения в атрибуты класса.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb07c095915807" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb07c095915807-1">1</div><div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-672da521bb07c095915807-2">2</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb07c095915807-1"><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">slope_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">slope_</span></div><div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-672da521bb07c095915807-2"><span class="crayon-e"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-v">intercept_</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">intercept_</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>Только теперь значения атрибутов доступны любому методу в классе. В частности, мы передали их <strong>методу .predict()</strong> для создания прогноза. Если бы мы забыли прописать код выше, метод <strong>.predict()</strong> не получил бы необходимых ему данных.</p> <h4 class="wp-block-heading" id="30-vyzov-metoda-vnutri-drugogo-metoda-v-klasse">Вызов метода внутри другого метода в классе</h4> <p>Внутри метода <strong>.fit()</strong> мы вызываем еще один <strong>метод .find_mean()</strong> для нахождения среднего арифметического значения. Очень важно, чтобы «вложенный» метод вызывался через <strong>self</strong>.</p> <div class="wp-block-urvanov-syntax-highlighter-code-block"><!-- Urvanov Syntax Highlighter v2.8.37 --> <div id="urvanov-syntax-highlighter-672da521bb07e635287843" class="urvanov-syntax-highlighter-syntax crayon-theme-familiar-my-copy urvanov-syntax-highlighter-font-consolas urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 15px; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; font-size: 16px !important; line-height: 22px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="show"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 16px !important; line-height: 22px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-672da521bb07e635287843-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-672da521bb07e635287843-1"><span class="crayon-v">X_mean</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">self</span><span class="crayon-sy">.</span><span class="crayon-e">find_mean</span><span class="crayon-sy">(</span><span class="crayon-v">X</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> </div> <p>В противном случае Питоне не будет знать, где искать нужный метод, и код выдаст ошибку.</p> <h2 class="wp-block-heading" id="31-podvedem-itog">Подведем итог</h2> <p>Сегодня мы узнали, что такое объектно-ориентированное программирование, научились создавать классы и объекты этих классов, рассмотрели принципы ООП (инкапсуляцию, наследование и полиморфизм). Кроме того, мы увидели, как классы и объекты применяются в машинном обучении.</p> <p>Помимо этого мы узнали в целом о том, какие подходы или парадигмы используются при написании кода.</p> <h3 class="wp-block-heading" id="32-voprosy-dlya-zakrepleniya">Вопросы для закрепления</h3> <p class="has-black-color has-text-color has-background" style="background-color:#ffe8c4">Вопрос. Что означает запись названия атрибута <strong>_type_</strong> и <strong>__type_</strong>?</p> <div class="wp-block-ub-content-toggle" id="ub-content-toggle-0a189eec-798b-41d5-9544-8ce525c7aba7" data-mobilecollapse="true" data-desktopcollapse="true"> <div class="wp-block-ub-content-toggle-accordion" id="ub-content-toggle-panel-block-570a7392-2914-4959-9d86-d3483930d87c"> <div class="wp-block-ub-content-toggle-accordion-title-wrap"" aria-controls="ub-content-toggle-panel-0-0a189eec-798b-41d5-9544-8ce525c7aba7" tabindex="0"> <p class="wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-0a189eec-798b-41d5-9544-8ce525c7aba7">Посмотреть правильный ответ</p><div class="wp-block-ub-content-toggle-accordion-toggle-wrap left"><span class="wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-math-plus"></span> </div></div><div role="region" aria-expanded="false" class="wp-block-ub-content-toggle-accordion-content-wrap ub-hide" id="ub-content-toggle-panel-0-0a189eec-798b-41d5-9544-8ce525c7aba7"> <p>Ответ: одинарный и двойной символы подчеркивания <em>перед</em> названием атрибута указывают на то, что это частные атрибуты (private attributes), которые должны использоваться только внутри класса (одинарный символ рекомендует не обращаться к атрибуту type извне, двойной — препятствует этому); символ подчеркивания <em>после</em> названия атрибута позволяет отличить переменную type от названия функции type()</p> </div></div> </div> <p class="has-black-color has-text-color has-background" style="background-color:#ffe8c4">Вопрос. Наследуются ли методы и атрибуты родительского класса?</p> <div class="wp-block-ub-content-toggle" id="ub-content-toggle-169629c4-8e2f-47a6-a6fb-ff19d88e37a4" data-mobilecollapse="true" data-desktopcollapse="true"> <div class="wp-block-ub-content-toggle-accordion" id="ub-content-toggle-panel-block-32a77684-675d-4001-b018-c0d67e769784"> <div class="wp-block-ub-content-toggle-accordion-title-wrap"" aria-controls="ub-content-toggle-panel-0-169629c4-8e2f-47a6-a6fb-ff19d88e37a4" tabindex="0"> <p class="wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-169629c4-8e2f-47a6-a6fb-ff19d88e37a4">Посмотреть правильный ответ</p><div class="wp-block-ub-content-toggle-accordion-toggle-wrap left"><span class="wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-math-plus"></span> </div></div><div role="region" aria-expanded="false" class="wp-block-ub-content-toggle-accordion-content-wrap ub-hide" id="ub-content-toggle-panel-0-169629c4-8e2f-47a6-a6fb-ff19d88e37a4"> <p>Ответ: (1) методы родительского класса наследуются по умолчанию, (2) то же относится и к атрибутам, при условии что в классе-потомке новых атрибутов не будет; (3) при этом для того чтобы унаследовать атрибуты родительского класса и <em>одновременно</em> добавить свои собственные, в классе-потомке нужно использовать функцию <strong>super()</strong></p> </div></div> </div> <p class="has-black-color has-text-color has-background" style="background-color:#ffe8c4">Вопрос. В чем смысл функционального подхода к программированию?</p> <div class="wp-block-ub-content-toggle" id="ub-content-toggle-34c73c78-cb69-4293-9620-5a92b3659440" data-mobilecollapse="true" data-desktopcollapse="true"> <div class="wp-block-ub-content-toggle-accordion" id="ub-content-toggle-panel-block-802bcaee-a77a-4bb0-931e-9d9f65d02fd4"> <div class="wp-block-ub-content-toggle-accordion-title-wrap"" aria-controls="ub-content-toggle-panel-0-34c73c78-cb69-4293-9620-5a92b3659440" tabindex="0"> <p class="wp-block-ub-content-toggle-accordion-title ub-content-toggle-title-34c73c78-cb69-4293-9620-5a92b3659440">Посмотреть правильный ответ</p><div class="wp-block-ub-content-toggle-accordion-toggle-wrap left"><span class="wp-block-ub-content-toggle-accordion-state-indicator wp-block-ub-math-plus"></span> </div></div><div role="region" aria-expanded="false" class="wp-block-ub-content-toggle-accordion-content-wrap ub-hide" id="ub-content-toggle-panel-0-34c73c78-cb69-4293-9620-5a92b3659440"> <p>Ответ: получение результата достигается за счет передачи данных из одной функции в другую</p> </div></div> </div> <p>На следующем занятии мы вернемся «на уровень ниже» и посмотрим, как пишутся и исполняются <a href="https://www.dmitrymakarov.ru/python/script-13/">программы на Питоне</a>.</p> </div> <!-- .content --> </div> <!-- .post --> <footer class="site-footer section-inner"> <!--<p class="copyright">© 2024 <a href="https://www.dmitrymakarov.ru" class="site-name">Машинное обучение</a></p>--> </footer> <!-- footer --> </main> <script type="text/javascript" src="//cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js?ver=6.6.2" id="mathjax-js"></script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-content/plugins/ultimate-blocks/src/blocks/content-toggle/front.build.js?ver=3.2.2" id="ultimate_blocks-content-toggle-front-script-js"></script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-content/plugins/ultimate-blocks/src/blocks/table-of-contents/front.build.js?ver=3.2.2" id="ultimate_blocks-table-of-contents-front-script-js"></script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-includes/js/masonry.min.js?ver=4.2.2" id="masonry-js"></script> <script type="text/javascript" id="mcluhan_global-js-extra"> /* <![CDATA[ */ var mcluhan_ajaxpagination = {"ajaxurl":"https:\/\/www.dmitrymakarov.ru\/wp-admin\/admin-ajax.php","query_vars":"{\"page\":\"\",\"pagename\":\"python\\\/oop-12\"}"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.dmitrymakarov.ru/wp-content/themes/mcluhan/assets/js/global.js?ver=2.1.1" id="mcluhan_global-js"></script> </body> </html>