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

Алгоритмизация и программирование. Язык Python. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
7. КЛАССЫ В PYTHON
7.1. Создание классов и объектов
Создание класса в Python начинается с инструкции class. Вот так будет выглядеть минимальный класс.
class C: pass
Класс состоит из объявления (инструкция class), имени класса (например, это имя C) и тела класса, которое содержит атрибуты и методы (в примере одна инструкция pass). Для того чтобы создать объект класса, необходимо восполь­зоваться следующим синтаксисом:
имя_объекта = имя_класса()
Класс может содержать атрибуты и методы. Пример
# Представленный класс, содержит атрибуты color (цвет), width (ширина), height (высота)
class Rectangle : color = “green” width = 100 height = 100
Доступ к атрибуту класса можно получить следующим образом:
имя_объекта.атрибут
Пример
rect1 = Rectangle() print (rect1.color)
Метод – это функция, находящаяся внутри класса, выполняющая опреде­ленную работу, которая, чаще всего, предполагает доступ к атрибутам создан­ного объекта. Например, к классу Rectangle можно добавить метод, считающий площадь прямоугольника. Для того, чтобы метод в классе знал, с каким объек­том он работает (это нужно для того, чтобы получить доступ к атрибутам: ши­рина (width) и высота (height)), первым аргументом ему следует передать пара­метр self, через который он может получить доступ к своим данным.
Пример
class Rectangle : color = "green" width = 100 height = 100 def square(self): return self .width * self .height
81
Окончательный вариант программы, демонстрирующий работу с атрибу­тами и методами, будет выглядеть так:
class Rectangle : color = "green" width = 100 height = 100 def square( self ): return self .width * self .height rect1 = Rectangle() print (rect1.color) print (rect1.square()) rect2 = Rectangle() rect2.width = 200 rect2.color = "brown" print (rect2.color) print (rect2.square())
7.2. Конструктор класса
Конструктор класса позволяет задать определенные параметры объекта
при его создании. Таким образом, появляется возможность создавать объекты с уже заранее заданными атрибутами. Конструктором класса является метод:
_init__(self)
Например, для того, чтобы иметь возможность задать цвет, длину и ши-
рину прямоугольника при его создании, добавим к классу Rectangle следующий конструктор:
class Rectangle : def _init__ ( self , color = "green" , width = 100 , height = 100 ): self .color = color self .width = width self .height = height def square ( self ): return self .width * self .height rect1 = Rectangle() print (rect1.color) print (rect1.square()) rect1 = Rectangle( "yellow" , 23 , 34 ) print (rect1.color) print (rect1.square())
82
7.3. Наследование
В организации наследования участвуют как минимум два класса: класс
родитель и класс потомок. При этом возможно множественное наследование, в этом случае у класса потомка есть несколько родителей. Не все языки програм­мирования поддерживают множественное наследование, но в Python можно его использовать. Синтаксически создание класса с указанием его родителя/ей вы­глядит так:
class имя_класса(имя_родителя1, [имя_родителя2,…, имя_родителя_n])
Доработаем наш пример так, чтобы в нем присутствовало наследование.
class Figure : def _init__ (self , color ): self .color = color def get_color (self ): return self .color class Rectangle(Figure): def _init__ ( self , color , width = 100 , height = 100 ): super ().__init__(color) self .width = width self .height = height def square(self ): return self .width * self .height rect1 = Rectangle( "blue" ) print(rect1.get_color()) print(rect1.square()) rect2 = Rectangle( "red" , 25 , 70 ) print(rect2.get_color()) print(rect2.square())
7.4. Полиморфизм
Полиморфизм, как правило, используется с позиции переопределения ме­тодов базового класса в классе наследнике. Проще всего это рассмотреть на примере.
Пример
# Добавить в базовый класс метод info(), который печатает сводную инфор­мацию по объекту класса Figure и переопределить этот метод в классе Rec­tangle, где добавятся дополнительные данные и вывод
class Figure : def _init__ ( self , color ): self .color = color def get_color ( self ):
83
return self .color def info ( self ): print ( "Figure" ) print ( "Color: " + self .color) class Rectangle ( Figure ): def _init__ ( self , color , width = 100 , height = 100 ): super ().__init__(color) self .width = width self .height = height def square ( self ): return self .width * self .height def info ( self ): print ( "Rectangle" ) print ( "Color: " + self .color) print ( "Width: " + str ( self .width)) print ( "Height: " + str ( self .height)) print ( "Square: " + str ( self .square())) fig1 = Figure( "green" ) print (fig1.info()) rect1 = Rectangle( "red" , 24 , 45 ) print (rect1.info())
Таким образом, наследник класса может расширять и модифицировать функционал класса родителя.
7.5. Работа с датами и временем
7.5.1. Модуль datetime
Основной функционал для работы с датами и временем сосредоточен в
модуле datetime в виде следующих классов:
date;
time;
datetime.
7.5.2. Класс date
Для работы с датами воспользуемся классом date, который определен в модуле datetime. Для создания объекта date мы можем использовать конструк­тор date, который последовательно принимает три параметра: год, месяц и день:
date(year, month, day)
84
Примеры import datetime
yesterday = datetime.date(2017,5, 2) print(yesterday) Результат: 2017-05-02
# Если необходимо получить текущую дату, то можно воспользоваться ме­тодом today()
from datetime import date today = date.today() print(today) Результат: 2017-05-03 print("{}.{}.{}".format(today.day, today.month, today.year))
Результат: 2.5.2017
С помощью свойств day, month, year можно получить соответственно день, месяц и год.
7.5.3. Класс time
За работу с временем отвечает класс time. Используя его конструктор, можно создать объект времени:
time([hour] [, min] [, sec] [, microsec])
Конструктор последовательно принимает часы, минуты, секунды и мик-
росекунды. Все параметры необязательные, и если мы какой-то параметр не пе­редадим, то соответствующее значение будет инициализироваться нулем.
Пример
from datetime import time current_time = time() print(current_time) Результат: 00:00:00 current_time = time(16, 25) print(current_time) Результат: 16:25:00 current_time = time(16, 25, 45) print(current_time) Результат: 16:25:45
7.5.4. Класс datetime
Класс datetime из одноименного модуля объединяет возможности работы с датой и временем. Для создания объекта datetime можно использовать следу­ющий конструктор:
85
datetime(year, month, day [, hour] [, min] [, sec] [, microsec])
Первые три параметра, представляющие год, месяц и день, являются обя-
зательными. Остальные необязательные, и если мы не укажем для них значе­ния, то по умолчанию они инициализируются нулем.
Пример
from datetime import datetime deadline = datetime(2017, 5, 10) print(deadline) Результат: 2017-05-10 00:00:00 deadline = datetime(2017, 5, 10, 4, 30) print(deadline)
Результат: 2017-05-10 04:30:00
Для получения текущих даты и времени можно вызвать метод now(). Пример
from datetime import datetime now = datetime.now() print(now) Результат: 2017-05-03 11:18:56.239443
print("{}.{}.{} {}:{}".format(now.day, now.month, now.year, now.hour, now.minute)) Результат: 3.5.2017 11:21
print(now.date()) print(now.time())
С помощью свойств day, month, year, hour, minute, second можно получить отдельные значения даты и времени. А через методы date() и time() можно по­лучить отдельно дату и время соответственно.
7.5.5. Преобразование из строки в дату
Из функциональности класса datetime следует отметить метод strptime(),
который позволяет распарсить строку и преобразовать ее в дату. Этот метод
принимает два параметра:
strptime(str, format)
Первый параметр str представляет строковое определение даты и време­ни, а второй параметр - формат, который определяет, как различные части даты и времени расположены в этой строке.
Для определения формата мы можем использовать следующие коды:
%d: день месяца в виде числа;
%m: порядковый номер месяца;
86
 %y: год в виде 2-х чисел;
 %Y: год в виде 4-х чисел;
 %H: час в 24-х часовом формате;
%M: минута;
%S: секунда.
Применим различные форматы: from datetime import datetime
deadline = datetime.strptime("22/05/2017", "%d/%m/%Y") print(deadline) Результат: 2017-05-22 00:00:00
deadline = datetime.strptime("22/05/2017 12:30", "%d/%m/%Y %H:%M") print(deadline) Результат: 2017-05-22 12:30:00
deadline = datetime.strptime("05-22-2017 12:30", "%m-%d-%Y %H:%M") print(deadline) Результат:2017-05-22 12:30:00
8. РАБОТА С ФАЙЛАМИ
8.1. Открытие и закрытие файла
Для открытия файла используется функция open(), которая возвращает файловый объект. Синтаксис функции выглядит так:
open(имя_файла, режим_доступа)
Для указания режима доступа используется следующие символы:
‘r’ открыть файл для чтения;
‘w’ – открыть файл для записи;
‘x’ открыть файл с целью создания, если файл существует, то вызов функции open завершится с ошибкой;
‘a’ открыть файл для записи, при этом новые данные будут добавлены в конец файла, без удаления существующих;
‘b’ – бинарный режим;
‘t’ – текстовый режим;
+ ’ – открывает файл для обновления.
По умолчанию файл открывается на чтение в текстовом режиме. У фай-
лового объекта есть следующие атрибуты:
file.closed – возвращает true если файл закрыт и false в противном случае;
file.mode – возвращает режим доступа к файлу, при этом файл должен
быть открыт;
file.name имя файла.
87
Пример f = open ("test.txt" , "r")
print("file.closed: " + str (f.closed)) Результат: file.closed: False # файл открыт
print ("file.mode: " + f.mode) Результат: file.mode: r # файл открыт для чтения
print ( "file.name: " + f.name)
Результат: file.name: test.txt
Для закрытия файла используется метод close(). Для рассмотренного примера: f.close()
8.2. Чтение данных из файла
Чтение данных из файла осуществляется с помощью методов
read(размер) и readline(). Метод read(размер) считывает из файла определенное количество символов, переданное в качестве аргумента. Если использовать этот метод без аргументов, то будет считан весь файл.
Пример
f = open ( "test.txt" , "r" ) # открытие файла для чтения print(f.read()) # считывание всей информации из файла Результат: '1 2 3 4 5 \n Work with file \n ' # файл содержит две строки f.close()
В качестве аргумента метода можно передать количество символом, ко-
торое нужно считать.
f = open ( "test.txt" , "r" ) print(f.read(5)) # считать 5 символов Результат: '1 2 3' f.close()
Метод readline() позволяет считать строку из открытого файла. f = open ( "test.txt" , "r" )
print(f.readline()) Результат: '1 2 3 4 5 \n ' f.close()
Построчное считывание можно организовать с помощью оператора for. f = open ( "test.txt" , "r" )
for line in f: print (line)
88
Результат 1 2 3 4 5 Work with file f.close()
8.3. Запись данных в файл
Для записи данных файл используется метод write(строка), который при успешной записи вернет количество записанных символов.
Пример
f = open ( "test.txt" , "a" ) f.write( "Test string" ) 11 f.close()
8.4. Дополнительные методы для работы с файлами
Метод tell() возвращает текущую позицию “условного курсора” в файле. Пример
# Если из файла считывается пять символов, то “курсор” будет установлен в позицию 5
f = open ( "test.txt" , "r" ) f.read( 5 ) '1 2 3' f.tell() 5 f.close()
Метод seek(позиция) выставляет позицию в файле. Пример
f = open ("test.txt","r") f.tell() 0 f.seek(8) 8 f.read(1) '5'
f.tell() 9 f.close()
89
Хорошей практикой при работе с файлами является применение операто-
ра with. При его использовании нет необходимости закрывать файл, при завер­шении работы с ним эта операция будет выполнена автоматически.
Пример
with open ("test.txt","r") as f: for line in f: print (line) Результат 1 2 3 4 5 Work with file Test string f.closed True
9. СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА
9.1. Tkinter. Создание окна приложения
Многие программы используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка про-
граммирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный набор компонентов, который называется tkinter.
Набор компанентов tkinter доступен в виде отдельного встроенного моду­ля, который содержит все необходимые графические компоненты - кнопки, текстовые поля и т. д.
Базовым моментом в построении графических программ является созда­ние окна. Затем в окно добавляются все остальные компоненты графического
интерфейса. Поэтому на первом этапе созадется простейшее окно. Пример
from tkinter import * # подключение всех компонетов из модуля tkinter root = Tk() # активация конструктора. Создаваемое окно присваивается пере-
менной root
root.title("Графическая программа на Python") # определение заголовка окна root.geometry("400x300") #определение размера окна root.mainloop() # отображение окна, запускает цикл обработки событий окна для взаимодействия с пользователем
90
В результате при запуске скрипта на экране отобразится пустое окно (рис. 8).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]