Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии и методы программирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

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

Наследование, инкапсуляция, полиморфизм

Наследование является одним из ключевых понятий ООП. За счет наследования можно создать один общий класс (класс-родитель) и создать множество других классов (классы-наследники), которые будут наследовать все поля, методы и конструкторы из главного класса.

Создадим один большой класс «Строения». В классе описываются базовые характеристики:

class Building: year = None city = None

def __init__(self, year, city): self.year = year

self.city = city

def get_info(self):

print("Год:", self.year, ". Город: ", self.city)

На основе класса мы можем создать объект жилого дома, объект школы, объект магазина и др. У всех объектов будут одинаковые характеристики и методы.

Понятно, что у объектов «школа» и «магазин» будут разные поля

ихарактеристики. Можно поступить двумя способами.

1.Создать два отдельных класса: School и Shop. В каждом классе будут все методы, поля и конструкторы, повторно переписанные из класса Building, а также новые методы, которые важны только для конкретного класса.

2.Создать два класса-наследника: School и Shop. Оба класса будут наследовать всё от класса Building и при этом будут содержать свои дополнительные функции. Таким образом, повторения кода не будет,

икод станет меньше и чище.

31

Для создания класса-наследника требуется создать класс и указать наследование от главного класса. Пример класса-наследника:

class School(Building): pupils = 0

def __init__(self, pupils, year, city): super(School, self).__init__(year, city) self.pupils = pupils

Встроенная функция super() возвращает прокси-объект (временный объект суперкласса), который позволяет нам получить доступ к методам базового класса.

Полиморфизм позволяет изменять методы в классах-наследниках. Пример:

class School(Building): pupils = 0

def __init__(self, pupils, year, city): super(School, self).__init__(year, city) self.pupils = pupils

def get_info(self): super().get_info() print("Pupils:", self.pupils)

Теперь при вызове данного метода для объекта типа School будет дополнительно выводиться количество учеников.

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

_ИмяКласса__ИмяАтрибута.

32

Варианты практического задания № 3

Создать класс с полями, указанными в индивидуальном задании (табл. 14). Реализовать в классе методы обработки данных, указанные в индивидуальном задании, и функцию формирования строки информации об объекте. Затем сформировать объекты со значениями-констан- тами и с введенными с клавиатуры значениями полей объекта, создать три объекта класса. Вывести результаты работы на экран. Предусмотреть ограничения (запрет неверных дат, времени, отрицательных значений стоимости и прочих положительных величин).

 

 

 

Таблица 14

 

Варианты для выполнения практического задания № 3

 

 

 

 

Вари-

Класс

Функция-метод № 1

Функция-метод № 2

ант

и его поля

обработки данных

обработки данных

 

 

 

 

1

Дата (три числа):

Определить, является

Увеличить дату

 

день, месяц, год

ли год високосным

на 5 дней

 

 

 

 

2

Работник: фамилия,

Вычислить стаж ра-

Вычислить, сколько

 

оклад, дата поступ-

боты работника на

дней прошло после по-

 

ления на работу

данном предприятии

ступления на работу

 

 

 

 

3

Книга: название,

Вычислить среднюю

Увеличить цену книги

 

количество стра-

стоимость одной стра-

в два раза, если назва-

 

ниц, цена

ницы (округление до

ние начинается со слова

 

 

двух знаков дробной

«Программирование»

 

 

части)

 

 

 

 

 

4

Время (три числа):

Вычислить количе-

Уменьшить время

 

часы, минуты,

ство полных минут

на 10 минут

 

секунды. После

в указанном времени

 

 

23:59:59 следует

 

 

 

0:00:00

 

 

 

 

 

 

5

Товар: наименова-

Определить, сколько

Увеличить цену товара

 

ние, цена, дата вы-

лет назад был выпу-

на 20 %, если в наиме-

 

пуска

щен товар

новании товара есть

 

 

 

слово «TV»

 

 

 

 

33

Продолжение табл. 14

Вари-

Класс

Функция-метод № 1

Функция-метод № 2

ант

и его поля

обработки данных

обработки данных

 

 

 

 

6

Дата (три числа):

Увеличить год на 1

Уменьшить дату

 

день, месяц, год

 

на 2 дня

 

 

 

 

7

Книга: название,

Вычислить, сколько

Вычислить количество

 

автор, дата издания

лет книге

дней, прошедших после

 

 

 

издания книги

 

 

 

 

8

Работник: фамилия,

Вычислить возраст

Определить, сколько

 

оклад, дата рожде-

работника

календарных дней оста-

 

ния

 

лось до исполнения ра-

 

 

 

ботнику 50 лет

 

 

 

 

9

Время (три числа):

Вычислить количе-

Увеличить время

 

часы, минуты,

ство секунд в указан-

на 5 секунд

 

секунды. После

ном времени

 

 

23:59:59 следует

 

 

 

0:00:00

 

 

 

 

 

 

10

Четыре целых

Вычислить среднее

Определить максималь-

 

числа: a, b, c, d

арифметическое чи-

ное из чисел

 

 

сел

 

 

 

 

 

11

Работник: фамилия,

Увеличить оклад

Работникам, у которых

 

должность, оклад

на 15 % (каждому ра-

фамилия начинается

 

 

ботнику)

с сочетания букв

 

 

 

«Иван», присвоить

 

 

 

должность «инженер»

 

 

 

 

12

Книга: название,

Увеличить количе-

Уменьшить цену в два

 

количество стра-

ство страниц на 10

раза, если количество

 

ниц, цена

 

страниц больше 100

 

 

 

(после увеличения)

 

 

 

 

13

Дата (три числа):

Определить, совпа-

Увеличить дату на один

 

день, месяц, год

дают ли номер месяца

месяц

 

 

и число дня

 

 

 

 

 

34

 

 

 

Окончание табл. 14

 

 

 

 

 

Вари-

Класс

Функция-метод № 1

 

Функция-метод № 2

ант

и его поля

обработки данных

 

обработки данных

 

 

 

 

 

14

Товар: наименова-

Пересчитать цену то-

 

Увеличить цену товара

 

ние, цена в рублях,

вара в евро (округле-

 

в евро на 10 %, если

 

изготовитель

ние до двух знаков

 

название товара содер-

 

 

дробной части)

 

жит слово «Samsung»

 

 

 

 

 

15

Время (три числа):

Определить количе-

 

Увеличить время

 

часы, минуты,

ство минут до полу-

 

на 100 минут

 

секунды. После

ночи (0:00:00)

 

 

 

23:59:59 следует

 

 

 

 

0:00:00

 

 

 

 

 

 

 

 

16

Правильная дробь:

Выразить значение

 

Найти сумму цифр зна-

 

числитель, знамена-

дроби в процентах

 

чения знаменателя

 

тель

(округление до двух

 

 

 

 

знаков дробной части)

 

 

 

 

 

 

17

Комната: длина,

Площадь стен (вместе

 

Площадь стен без окна

 

ширина, высота

с окнами и дверьми)

 

(размер 2×1,2 м) и двери

 

(в метрах)

 

 

(размер 0,75 ×2 м)

 

 

 

 

 

18

Комплексное

Вычислить модуль

 

Вычислить аргумент

 

число: действитель-

комплексного числа

 

комплексного числа

 

ная (a1) и мнимая

 

 

в градусах

 

(b1) части числа

 

 

 

 

 

 

 

 

19

Координаты изоб-

Вычислить площадь

 

Вычислить длину диаго-

 

ражения прямо-

прямоугольника в

 

нали прямоугольника

 

угольника: x1, y1,

пикселях

 

в пикселях

 

x2, y2

 

 

 

 

 

 

 

 

20

Параллелепипед:

Вычислить площадь

 

Вычислить объем парал-

 

длины сторон

поверхности

 

лелепипеда

 

 

 

 

 

35

Контрольные вопросы

1.Расскажите, что такое функция и ее основные параметры.

2.Как создается функция?

3.Как вызывается функция?

4.Какая инструкция возвращает результат выполнения функции?

5.Перечислите особенности анонимных функций.

6.Создание класса. Как определяются методы класса?

7.Как создаются экземпляры класса?

8.Как создаются классы-наследники?

9.Приведите пример использования полиморфизма.

10.Перечислите особенности инкапсуляции в Python.

36

4. ФРЕЙМВОРК FLASK

Основы Flask

Фреймворк Flask относится к микрофреймворкам – минималистичным каркасам, которые обеспечивают лишь базовые возможности для реализациитойилииной задачи. Кплюсамотноситсябыстрое изучение фреймворка, а к минусам – его функциональность. Для создания сайта, которыйтребуетвзаимодействиясразличногородаAPI, данныйфреймворк не станет идеальным выбором [2].

Для установки Flask в терминале вводится следующая команда: pip install flask. Примерпростейшейweb-страницы: восновном файле (app.py) создается Flask-объект, вносится отслеживание URLадреса (главной страницы) и функция, возвращающая надпись «Hello, World».

from flask import Flask

app = Flask(__name__)

@app.route('/') def index():

return "Hello, World"

if __name__ == "__main__": app.run(debug=True)

Проект может запускаться двумя способами:

Run в PyCharm;

python app.py в терминале.

37

После запуска в терминале появляется адрес, по которому доступен сайт (localhost). Перейдя по нему, видим надпись «Hello, World» в браузере. Следует отметить, что отслеживание может присутствовать для несколькихURL одновременно, напримердляглавнойстраницыистра-

ницы about:

@app.route('/')

@app.route('/home') def index():

return "Hello, World"

В данном случае надпись «Hello, World» будет доступна на обеих страницах.

С давних пор программисты стараются отделить функциональную часть сайта от визуальной. Для решения этой проблемы были созданы различныешаблонизаторы, которыевыполняютрольотделениялогической части сайта от визуальной. В библиотеке Flask таким шаблонизатором является Jinja.

Возможности шаблонизатора Jinja большие. Он способен выводить стандартную HTML-разметку, а также выполнять проверку условий, вывод массивов через цикл, вывод переменных и многое другое.

Вместоподходаквыводуинформациичерезтекстмыбудемиспользовать функцию render_template, которая позволяет выводить большие HTML-шаблоны с кодом из шаблонизатора Jinja.

Для создания HTML-шаблонов создается папка templates. В ней соответственно создается стандартный файл index.html.

HTML (Hypertext Markup Language) – этокод, которыйиспользуется для структурирования и отображения веб-страницы и ее контента. Например, контент может быть структурирован внутри множества параграфов, маркированных списков или с использованием изображений и таблиц данных.

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

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

38

слеша / перед именем элемента: <имя элемента></имя элемента>. Между начальным и закрывающим тегами находится содержимое элемента – контент.

Первая конструкция в любом HTML-документе – элемент <!DOCTYPE>. Он не относится к тегам и никаким образом не может отображаться на странице. Его задача – указать браузеру, какой стандарт HTML используется в этом документе. Сейчас везде используется стандарт HTML5. Записывается элемент следующим образом:

<!DOCTYPE html>

Тег <html></html> является основой основ. Именно внутри него располагается вся информация. Благодаря этому тегу браузер определяет, где начинается контент, который необходимо обработать как

HTML.

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

Тег <head></head> служит для хранения служебной информации. Здесь возможны самые разные сочетания тегов, которые подсказывают браузеру название страницы, описание, ключевые слова и др. Такая информация называется метаинформацией. В современном web она отвечает не только за служебную информацию для браузера, но и активно используется при продвижении сайта. Поисковые системы считывают всю эту информацию и на основе множества алгоритмов определяют место сайта при разных поисковых запросах.

Метатег <meta> принимает множество разных атрибутов, с которыми вы ознакомитесь при создании своих сайтов. В настоящее время важным является метатег <meta> с атрибутом charset. Он позволяет установить кодировку документа.

Для указания заголовка страницы используется специальный парный тег <title></title>, внутри которого указывается нужная информация.

После тега <head> в документе указывается парный тег <body></body>, который является «телом» всей страницы. Именно

39

здесь размещается вся информация, которая будет выведена на странице.

Для этого существует несколько основных типов элементов:

блочные элементы – отвечают за каркас страницы;

строчные элементы – помогают нам в процессе стилизации страницы или добавления функциональных частей.

Основными блочными элементами являются:

контейнер потокового контента <div>

абзац <p>

теги списков <ul>/<ol>/<li>

заголовки <h1>/<h2>/<h3>/<h4>/<h5>/<h6>

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

Наиболее часто используемыми строчными элементами являются:

строковый контейнер <span>

гиперссылка <a>

теги выделения текста <i>/<em>/<b>/<strong>

Помимо естественных свойств высоты и ширины, любой элемент на странице может иметь следующие свойства:

padding – внутренние отступы элемента;

margin – внешние отступы от элемента;

border – видимые границы элемента.

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

Внеся изменения в шаблон HTML, рассмотрим, как его отобразить на необходимой URL-странице:

from flask import Flask, render_template app = Flask(__name__)

@app.route('/')

@app.route('/home') def index():

return render_template("index.html")

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]