Методична розробка уроку
Елективний курс: Введення в об'єктно-орієнтоване програмування на Python
Рівень: Програмування для початківців
На минулому уроці нами була написана "серйозна" програма, яку можуть використовувати інші програмісти. Однак як? Просто копіювати код і вставляти в свої скрипти? Або є більш економний спосіб (в сенсі зменшення обсягу коду і зручності його використання)?
При створенні великих програм виявився вигідним так званий модульний принцип організації, коли є основний файл з частиною коду програми, до якого приєднується (в який імпортується) вміст інших файлів. Коли вихідний код основного файлу транслюється в машинний код, то імпортовані файли також виконуються як і код основного файлу.
Такий спосіб організації програми дозволяє ізолювати часто використовуваний код в файл-модуль, а потім імпортувати його в інші файли без копіювання коду. Але це далеко не єдина перевага модульного принципу організації програми.
Так як же імпортувати вміст одного файлу в інший в мові програмування Python? Існує два основних способи: інструкція import і інструкція from. Перша інструкція запускає (інтерпретує) файл-модуль повністю, при цьому для доступу до змінних (атрибутам) модуля з основного файлу слід вказувати ім'я модуля попереду необхідного атрибуту: module.attribute (так звана, точкова нотація). Інструкція from передає інтерпретатора лише зазначені імена з файлу-модуля, однак при доступі до цих змінним не треба вказувати ім'я модуля. Перший спосіб хороший, якщо має бути користуватися вмістом майже всього модуля, другий - якщо будуть затребувані одна-дві функції або клас з модуля. У прикладі даного уроку ми скористаємося інструкцією import.
Імпорт в мові програмування Python здійснюється наступним чином: після слова import пишеться ім'я імпортованого модуля. Модуль і файл в Python поняття майже не помітні. Файли з кодом на мові Python зазвичай мають розширення .py, проте в інструкції import розширення не вказується. Наприклад, якщо ми маємо файл-модуль scale.py, то імпортувати його в інший файл слід так: import scale.
Де повинен розташовуватися модуль? В принципі, будь-де, тому що можна "вручну" налаштувати інтерпретатор так, що він буде шукати там, де забажає програміст. Однак, якщо нічого не налаштовувати, то інтерпретатор Python знайде файли, якщо їх розташувати наприклад, в каталозі, куди встановлено Python або в тому ж каталозі, де і файл, в який здійснюється імпорт. Цим останнім варіантом ми і скористаємося.
Отже, у нас є файл з кодом, що дозволяє обчислювати обклеюваної площа приміщення (урок №7). Нехай він називається rooms.py. Крім того, видалимо з нього "код тестування" ...
... і припустимо, що класи цього модуля будуть використовуватися в іншому (основному) файлі. Припустимо, цей основний файл надає інтерфейс користувачу для введення даних і отримання результату. Основний файл повинен бути збережений в тому ж каталозі, що і файл rooms.py.
Насамперед, імпортуємо вміст файлу rooms.py
Далі організуємо запит даних у користувача, одночасно перетворивши дані в цілочисельний тип (функція int):
Тепер створюємо об'єкт класу Room. Опис класу знаходиться в модулі rooms, який був імпортований інструкцією import (а не from), тому, щоб отримати доступ до класу Room і його атрибутам, слід при створенні об'єкта вказати модуль, в якому він знаходиться:
А тепер можна користуватися атрибутами класу з модуля скільки влізе:
Практична робота:
- Створіть скрипт, який імпортує модуль з класом Room і використовує його (як показано в даному уроці).
- Допишите попередню програму, розширивши її можливості: можна по-бажанням отримати додаткові відомості (площа вікна і двері).
- Переробіть програму таким чином, щоб вона не запитувала у користувача дані, а пропонувала вибір з п'яти готових рішень: на екран виводяться характеристики різних приміщень, - користувачеві залишається тільки вибрати.