Конструктор уроків
1
ООП
Обʼєктно-орієнтоване програмування - один з найефективніших підходів до написання програмного забезпечення.
В обʼєктно-орієнтованому програмуванні ви пишете класи, що є абстракцією реальних предметів і ситуацій, та створюєте на їх основі обʼєкти. Клас визначає загальну поведінку цілої категорії обʼєктів. Коли ви створюєте індивідуальні обʼєкти класу, кожен з них буде автоматично наділений спільними характеристиками, а потому ви зможете надати їм будь-яких індивідуальних рис.
Створення обʼєкта з класу називається «створення екземпляра» (instantiation). У цьому розділі ви писатимете класи та створюватимете екземпляри; задаватимете, яка інформація може в них зберігатися, визначатимете доступні дії. Також можна писати класи, що розширюють функціонал наявних класів, - так схожі класи зможуть ефективно використовувати спільний код. Ви зберігатимете ваші класи в модулях, а написані іншими програмістами імпортуватимете у власний код.
Розуміння обʼєктно-орієнтованого програмування допоможе вам бачити світ по програмістськи - пізнати власний код, себто не просто знати перебіг подій від рядка до рядка, але й осягнути глобальніші концепції. Опанувавши логіку, що стоїть за класами, ви зможете писати програми, що ефективно працюють з будь якою проблемою. Що складніші завдання стоятимуть перед вами, то кориснішими будуть класи.
Коли ви та інші члени команди пишете код на основі спільної логіки, вам легше буде розуміти роботу одне одного, колеги швидко читатимуть ваші програми і ви досягнете значніших результатів.
Створення та використання класу
За допомогою класів можна створити модель будь-чого. Почнімо з маленького класу, Dog, що представлятиме собаку - не якогось конкретного пса, а будь-якого. Що ми знаємо про домашніх улюбленців? По-перше, всі вони мають імʼя та вік; більшість песиків вміють виконувати команди «сидіти» (sit) та лежати (roll over). Ці дві характеристики, імʼя й вік, та дві поведінки (сидіти та лежати) увійдуть до нашого класу Dog, позаяк вони здебільшого притаманні собакам. Цей клас проінструктує Python, як створити обʼєкт, що зображає собаку. Після того, як клас написаний, можна змоделювати його окремі екземпляри, кожен з яких представлятиме конкретного песика.
Створення класу Dog
Кожен екземпляр класу До міститиме імʼя та вік і наділить собак здатністю сидіти - функція sit () та лежати - oll_over ().

Цей код виглядає трохи заплутано, та не хвилюйтеся - працюючи з цим розділом, ви встигнете звикнути до такої структури. На кроці ① ми визначаємо клас Dog. 3а домовленістю імена класів у Python починаються з великої літери. У визначенні класу немає дужок, позаяк ми створюємо його з нуля. На кроці ② наведений docstring, що описує функціонал класу.
Метод _ _init_ _()
Функція, що є частиною класу, називається методом. Усе, що ви знаєте про функції, стосується і методів; єдина практична різниця полягає в тому, як ми викликаємо методи. Метод __ init __ ( ) на кроці ③ - це спеціальний метод, який Python запускає автоматично щоразу, коли ми створюємо новий екземпляр класу Dog. Імʼя цього методу виокремлюється подвійним нижнім підкреслюванням - це такий запобіжник, щоб Python не переплутав уставний метод з одним з ваших. Зверніть увагу: з обох боків від __init __( ) має стояти подвійне нижнє підкреслювання. Якщо поставите одинарне, метод не буде викликано автоматично при використанні класу, що призведе до неочевидних помилок.
Згідно з нашим визначенням, метод __ init __ ( ) має три параметри: self, name та age. Параметр self обовʼязковий при визначенні методу, він завжди передує іншим параметрам, його треба додати у визначення, бо коли метод викликається (створюється екземпляр Dog), йому автоматично передається аргумент self. Кожен виклик методу, повʼязаний з окремим екземпляром класу, автоматично передає йому self, що є вказівником на сам екземпляр; така система дає окремому екземплярові доступ до атрибутів та методів класу. Коли ми створюємо екземпляр Dog, Python викличе метод __ init __ ( ) класу Dog. Ми передамо Dog () імʼя та вік, а self буде переданий автоматично. Щоразу при створенні екземпляра класу Dog ми передаватимемо значення лише для двох останніх параметрів - name та age.
Дві змінні, які ми визначили на кроці ④, мають префікс self. Будь-яка змінна з цим префіксом доступна кожному методові класу, а також і в будь-якому екземплярі цього класу. Рядок self.name = name бере значення параметра name та присвоює його змінній name , що привʼязується до екземпляра класу під час створення. Такий самий процес відтворюється і для self.age = age. Змінні, доступні в усіх екземплярах класу, називаються атрибутами.
Клас Dog має два інших методи: sit () та roll_over () ⑤. Позаяк їм для роботи не треба додаткової інформації, у їхньому визначенні стоїть лише один параметр - self. Екземпляри класу, які ми потім створимо, матимуть доступ до цих методів. Іншими словами, вони вмітимуть сидіти та лежати. Поки що методи sit() та roll_ver () не надто функціональні. Вони просто виводять на екран повідомлення, що собака сидить або лежить відповідно. Та на базі цієї концепції можна розширити код до чогось реалістичнішого: якби цей клас був частиною комп'ютерної гри, ці методи містили б код для того, щоб песик на екрані сідав або лягав. Якби цей клас керував роботом, ці методи відповідали б безпосередньо за рухи собаки-трансформера.
Створення екземпляра класу
Уявіть клас як набір інструкцій для створення його екземпляра. Клас Dog - це набір інструкцій, що вказує Python, як робити індивідуальні екземпляри конкретних песиків.
Створімо один такий екземпляр:

Клас Dog у цьому прикладі - той самий, що ми написали в попередньому прикладі. На кроці ① ми кажемо Python створити собаку на імʼя 'Willie' віком 6. Коли Python зчитує цей рядок, він викликає метод __ init __ ( ) класу Dog з аргументами 'Willie' та 6. Метод __ init __ ( ) створює екземпляр класу, що є моделлю конкретного собаки та присвоює атрибутам name та age відповідні значення. Тоді Python повертає екземпляр - нашого конкретного песика. Ми присвоюємо його у змінну my_dog. Рекомендації з оформлення імен стають тут у пригоді: ми зазвичай можемо одразу здогадатися, що Dog - це імʼя класу, бо воно починається з великої літери, а my_dog, з маленької літери, позначає окремий екземпляр цього класу.
Звернення до атрибутів
Щоб звернутися до атрибутів, скористайтеся крапкою. На кроці ② ми звертаємося до атрибута my_dog за іменем:
my_dog.name
Звернення за допомогою крапки доволі поширене в Python. Цей синтаксис наочно демонструє, як саме Python шукає значення атрибута - у цьому разі знаходить його за відповідним іменем в екземплярі my_dog класу Dog. Це той самий атрибут, що позначений як self.name у класі Dog. На кроці ③ ми так само працюємо з атрибутом age.
Вивід цього коду - підсумок всього, що нам відомо про my_dog:
My dog's name is Willie. My dog is 6 years old.
Виклик методів
Створивши екземпляр класу Dog, ми можемо за допомогою крапки викликати будь-який метод, визначений в Dog. Дамо нашому собаці команди «сидіти» та «лежати»:

Щоб викликати метод, напишіть імʼя екземпляра (в цьому разі my_dog), а тоді - метод, який викликаєте; між ними поставте крапку.
Коли Python зчитує my_dog.sit (), він знаходить метод sit() у класі Dog та запускає його код; так само інтерпретується рядок my_dog.roll_over ().
Willie is now sitting. Willie rolled over!
Цей синтаксис відкриває широкі можливості. Коли атрибути та методи мають достатньо змістовні імена, такі як name, age, sit () та roll_over (), ми можемо легко здогадатися, що робить весь блок коду, навіть якщо раніше його в очі не бачили.
Створення багатьох екземплярів
Можна моделювати стільки екземплярів одного класу, скільки треба.
Створімо другого песика - your_dog (твій собака):

У цьому прикладі ми створюємо двох собак - Віллі (Willie) та Люсі (Lucy). Кожна з них - це окремий екземпляр, що має власний набір атрибутів і здатний виконувати однаковий набір дій:

Навіть якщо ви взяли те саме імʼя й той самий вік для другого собаки, Python все одно створить два окремі екземпляри класу Dog. Можна змоделювати як завгодно багато екземплярів одного класу, лише зважайте, що кожен з них присвоюється змінній з унікальним іменем або має унікальне розташування у списку чи словнику.
Я прочитав/прочитала теоретичну частину цього блоку і ознайомився/ознайомилась із прикладами програм, це підтверджую натисканням кнопки 
2
3
Вправа 1. Ресторан: Створіть клас Restaurant (Ресторан). Його метод init() має зберігати два атрибути: restaurant_name(назва ресторану) та cuisine_type (тип кухні). Напишіть метод describe_restaurant() (описати ресторан), що виводить ці дані (назву та тип кухні), і метод open_restaurant () (відкрити ресторан), який повідомляє про те, що заклад наразі працює. Зробіть екземпляр класу Restaurant. Виведіть по черзі обидва його атрибути та викличте обидва методи.
Рефлексія від 7 учнів
Сподобався:
Так: 4
Ні: 3
Зрозумілий:
Так: 4
Ні: 3
Потрібні роз'яснення:
Ні: 5
Так: 2
Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.