Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Язык Python. Учебное пособие
.pdf
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 и переопределить этот метод в классе Rectangle, где добавятся дополнительные данные и вывод
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).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
