ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 71
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Результат без создания экземпляров класса↓
Рисунок 1.17. После создания класса MyClass, но без создания экземпляров класса.
Результат↓
Рисунок 1.18. Результат работы метода класса после создания двух экземпляров.
-
Усложняем класс MyClass. Во-первых, в конструктор класса вводим переменную x и добавляем два метода. Получаем (Рисунок 1.19):
Результат ↓
Рисунок 1.19. Работа с усложнённым классом.
В рассмотренном примере методы, описанные в классе, имеют только один параметр «self», что является самым простым вариантом. Более сложные будут рассмотрены ниже.
Методы класса— это небольшие программки, предназначенные для работы с объектами. Методы могут создавать новые свойства (данные) объекта, изменять существующие, выполнять другие действия над объектами.
Обычно все методы класса объявляются на уровне класса, а не экземпляра. Вызов такого метода через экземпляр класса с помощью синтаксиса:
<экземпляр класса>.<Имя метода>([<Параметры>]).
Что надо указывать в параметрах метода конкретного экземпляра? Это самый интересный вопрос, требующий отдельного рассмотрения. При объявлении метода в классе по крайней мере надо указать хотя бы один параметр. За ним могут при необходимости указываться и другие параметры. Но именно по первому параметру интерпретатор устанавливает связь с необходимым экземпляром, и синтаксис вызова неявно преобразуется к следующему:
<Имя класса>.<Имя метода>(<экземпляр класса>, [<параметры>])
То есть первым параметром метода является на самом деле имя экземпляра класса (попросту класса). В рассмотренном классе доступ к атрибутам и методам класса внутри определяемого метода производится через переменную self с помощью точечной нотации.
После этого при вызове метода уже не нужно передавать ссылку на экземпляр класса в качестве параметра
, как это делается в определении метода внутри класса. Ссылку на экземпляр класса интерпретатор передает автоматически.
Иными словами, методам класса в первом параметре, который необходимо указывать явно, автоматически передается ссылка на экземпляр класса. Общепринято этот параметр называть именем self, хотя это и не обязательно. На следующем рисунке (рисунок 1.20) приведён пример с использованием другого имени, и по-прежнему всё работает!
Результат↓
Рисунок 1.20.Пример использования другого имени параметра связи вместо обычного self.
Попробуйте в строчке 87 использовать другой, не указанный в скобках метода параметр (строчка 86), и вы увидите ошибку!
1.10.4 Примеры создания и использования классов и их экземпляров
Перейдём к рассмотрению примеров немного более сложных классов, в которых конструктор имеет больше параметров.
1.10.4.1 Класс «Сотрудник»
Рисунок 1.
Результаты
Рисунок 1.21. Работа с классом «Сотрудник»
В любой момент можно добавлять, удалять или изменять атрибуты классов и объектов в любое время. Например, в том же классе можно добавить:
сотр1.возраст=27
сотр2.возраст=31
print ('Возраст ', сотр1.имя, '=', сотр1.возраст).
Вместо использования обычных операторов для доступа к атрибутам, можно использовать следующие функции:
-
Getattr (объект, имя [, по умолчанию]) — для доступа к атрибуту объекта. -
Hasattr (объект, имя) — проверить, если атрибут существует или нет. -
SetAttr (объект, имя, значение) — установить атрибут. Если атрибут не существует, он будет создан. -
Delattr (объект, имя) — для удаления атрибута.
1.11 Итоги: Основные положения парадигмы ООП
1.Каждый экземпляр класса имеет собственный набор атрибутов данных.
2.При использовании методом параметра self для создания атрибута этот атрибут принадлежит конкретному объекту, на который ссылается параметр self.
Такие атрибуты называются атрибутами экземпляра, потому что они принадлежат конкретному экземпляру класса.
3. В программе можно создавать многочисленные экземпляры одного и того же класса.
Задание № 1
1.Проверить на практике работу указанных функций по работе с атрибутами на примере класса «Сотрудник
Следует проверить работу этих функций на примере работы с классом «Сотрудник».
2. Имеется текст программы5:
class Second:
color = "red"
form = "circle
def changecolor(self,newcolor):
self.color = newcolor
def changeform(self,newform):
self.form = newform
obj1 = Second()
obj2 = Second()
print (obj1.color, obj1.form)
print (obj2.color, obj2.form)
obj1.changecolor("green")
obj2.changecolor("blue")
obj2.changeform("oval")
print (obj1.color, obj1.form)
print (obj2.color, obj2.form)
До реализации в PyCharm повести анализ, выделив класс, объекты и экземпляры класса. После чего предсказать результаты программы. После чего реализовать программу PyCharm и сравнить результаты с ранее предсказанными.
3.Создать два простых похожих по функционалу класса:
class ЕстьКонструктор:
def __init__(self,один,два)
self.перв_имя = один
self.втор_имя = два
экз1 = ЕстьКонструктор(“Пётр”, “Ok”)
print(экз_1.перв_имя,экз_1.втор_имя)
class НетКонструктора(self,один,два)
def имена(self,один,два)
self.перв_имя = один
self.втор_имя = два
экз_2 = НетКонструктора()
экз_2.имена(“Пётр”, “Ok”)
print (экз_2.перв_имя, экз_2.втор_имя)
Объяснить и предсказать результат их работы.
-
Создать класс для создания объекта «Круг» с конструктором, устанавливающего начальные значения радиуса и площади, вычисляемой по формуле. Создать два объекта с разными параметрами, распечатать их, а затем в программе поменять их значения.
1 https://docs-python.ru/tutorial/klassy-jazyke-python/prostranstvo-imen-oblast-vidimosti-klassah/
2 Ключевое слово init обрамляется двумя подчёркиваниями.
3 https://younglinux.info/oopython/init
4 Вместо точной для Python фразы «экземпляр объекта класса» для краткости будем использовать фразу «объект класса» или «экземпляр класса»!
5 Текст осознано набран