Классы в Python. Общие понятия. Ключевое слово class. Объекты классов. Объекты экземпляров
Содержание
- 1. Особенности использования классов в языке Python. Объекты классов и объекты экземпляров
- 2. Создание объекта класса. Общая форма
- 3. Создание объекта экземпляра. Общая форма
- 4. Особенности объектов классов
- 5. Особенности объектов экземпляров
- 6. Что такое атрибут класса? Пример класса Circle
- 7. Пример объявления и использования простого класса, сохраняющего некоторое значение
- 8. Пример реализации класса, который сохраняет набор данных. Класс SquareEquation — решение квадратного уравнения
- Связанные темы
Поиск на других ресурсах:
1. Особенности использования классов в языке Python. Объекты классов и объекты экземпляров
В языке программирования Python классы характеризуются следующими особенностями:
- в отдельности классы представляют собой определенные пространства имен;
- классы поддерживают создание набора объектов;
- пространства имен классов могут быть унаследованы;
- в классах можно реализовывать перегрузку функций (методов);
- в классах можно реализовывать перегрузку операторов.
Как известно, в языке Python любой элемент (число, строка, список и т.д) представлен объектом. Это касается и объектно-ориентированной модели Python, в которой различают два типа объектов:
- объекты классов. Эти объекты реализуют поведение по умолчанию. На основе объектов классов создаются объекты экземпляров. Объекты классов представляют собой фабрики по созданию объектов экземпляров;
- объекты экземпляров. Это объекты, которые создаются на основе объектов классов. Объекты экземпляров имеют собственное (самостоятельное) пространство имен а также наследуют имена (имеют доступ) классов, из которых они были созданы.
⇑
2. Создание объекта класса. Общая форма
Объект класса создается с помощью инструкции, которая содержит ключевое слово class. В простейшем случае общая форма создания объекта класса имеет вид:
class ClassName: # Элементы (атрибуты), реализованные в классе # ...
здесь
- ClassName – имя создаваемого класса. Это есть имя объекта класса. В этом классе можно реализовывать разные элементы класса, например внутренние данные, функции (методы), операторы и т.д.
На основании имени ClassName может быть создан реальный объект экземпляра.
⇑
3. Создание объекта экземпляра. Общая форма
Объект экземпляра создается с помощью вызова имени класса в правой части операции присваивания =. Каждый раз, когда вызывается имя класса, создается новый экземпляр объекта этого класса.
Общая форма создания объекта экземпляра следующая:
Obj = ClassName()
здесь
- Obj – имя объекта экземпляра, который создается объектом класса с именем ClassName. Созданный объект экземпляра Obj имеет свое собственное пространство имен;
- ClassName – имя объекта класса, который создается с помощью инструкции class.
⇑
4. Особенности объектов классов
В языке Python для объектов классов можно выделить следующие особенности:
- объект класса создается с помощью инструкции class, которая определена как выполняемая инструкция (ее можно вызывать из программного кода). Вызов инструкции class создает новый объект класса;
- внутри инструкции class можно создавать атрибуты объекта класса. Это осуществляется с помощью операции присваивания =. Доступ к атрибутам класса осуществляется по их составным (полным) именам, например Obj.NameAtr (атрибут с именем NameAtr в объекте класса с именем Obj);
- атрибуты класса описывают состояние объекта. Под состоянием объекта имеется в виду текущее значение данных внутри объекта;
- атрибуты класса описывают поведение объекта. Под понятием «поведение объекта» понимается наличие методов, обрабатывающих экземпляры. Методы в классах определяются с помощью инструкции def.
⇑
5. Особенности объектов экземпляров
Объект экземпляра есть результатом вызова объекта класса. Для объектов экземпляров можно выделить следующие характерные особенности:
- объект экземпляра создается на основании вызова объекта класса как функции, которая содержит круглые скобки ( ). Из одного объекта класса может быть создано любое количество объектов экземпляра;
- объект экземпляра есть конкретным элементом данных в программе;
- при создании каждый объект экземпляра наследует атрибуты класса, на основе которого он создается;
- объект экземпляра имеет свое собственное пространство имен;
- присваивание значений атрибутам происходит через первый аргумент, которым может быть, например, ссылка с именем self (смотрите примеры ниже). После присваивания создается соответствующий атрибут в каждом отдельном объекте экземпляра. В этом случае методы класса получают первым аргументом ссылку self (в соответствии с договоренностью), которая соответствует объекту экземпляра. С помощью этой ссылки (self) можно создавать или изменять данные экземпляра объекта. Данные экземпляра класса с помощью self создать (изменить) нельзя.
⇑
6. Что такое атрибут класса? Пример класса Circle
Атрибутом класса считается элемент, который реализован в классе. Таким элементом может быть метод, оператор, поле данных и т.д.
Например. Пусть задан класс с именем Circle, реализующий окружность на координатной плоскости.
# Классы. Атрибуты класса. Пример. # Объявить класс Circle, который реализует окружность на координатной плоскости class Circle: # Метод, устанавливающий значение центра окружности (x,y) и радиуса def Set(cr, x, y, radius): cr.x = x cr.y = y cr.radius = radius return # Получить данные об окружности в виде списка def Get(cr): return [cr.x, cr.y, cr.radius] # Вернуть как список def Print(cr): print('x = ', cr.x, ', y = ', cr.y, ', radius = ', cr.radius) return # Вычислить площадь окружности def Area(cr): return 3.1415*cr.radius*cr.radius # Объявить экземпляр объекта класса circle1 = Circle() # Установить значение координат circle1.Set(2, 3, 5) # Вывести данные об окружности circle1 circle1.Print() # Вычислить площадь круга area = circle1.Area() print('circle1.Area() = ', area)
В вышеприведенном классе Circle реализованы следующие атрибуты:
- метод Set(), устанавливающий значение атрибутов x, y, radius;
- метод Get(), возвращающий данные об окружности в виде списка;
- метод Print() – выводит информацию об окружности;
- метод Area() – выводит площадь окружности радиуса radius;
- внутренние поля данных x, y – координаты центра окружности;
- поле данных radius – радиус окружности.
В методах первым аргументом используется параметр с именем cr, который означает текущий экземпляр. Через это имя cr осуществляется доступ к данным: cr.x, cr.y, cr.radius. Имя cr может быть заменено на другое имя, например self.
⇑
7. Пример объявления и использования простого класса, сохраняющего некоторое значение
В примере объявляется класс с именем Value. В классе создается ячейка с данными, которая содержит некоторое значение. Имя данных в классе – value. Чтобы доступиться к данным используется параметр self, который представляет собой текущий экземпляр класса. Допускается использование другого имени вместо имени self (например, self2).
# Классы. Объявление класса. Использование класса # Объявить класс Value, который содержит некоторое значение class Value: # Объявление метода в классе Value def SetValue(self, val): self.value = val # self.value - сохраняемое значение # Метод, возвращающий значение value def GetValue(self): return self.value def Print(self): print("value = ", self.value) # Случай 1. Вызов методов через объект экземпляра obj1 = Value() # Объявить объект класса Value obj1.SetValue(25) # Установить новое значение в объекте класса obj1.Print() # value = 25 # Случай 2. Вызов метода SetValue() через объект класса obj2 = Value() # Объявить объект класса Value Value.SetValue(obj2, 37) Value.Print(obj2) # value = 37
Результат выполнения программы
value = 25 value = 37
На рисунке 1 изображены объекты, которые создаются в вышеприведенном примере.
Рисунок 1. Структура программы: объекты экземпляра и объект класса
⇑
8. Пример реализации класса, который сохраняет набор данных. Класс SquareEquation — решение квадратного уравнения
В примере создается экземпляр класса, который предназначен для решения квадратного уравнения. В классе с помощью имени экземпляра self создаются три члена данных с именами a, b, c.
Также в методах класса используются дополнительные внутренние переменные с именами d, x1, x2. Это только временные локальные переменные. Они не являются данными экземпляра класса и не влияют на состояние конкретного экземпляра объекта. Внутреннее состояние любого экземпляра объекта определяется данными a, b, c.
# Классы. Пример. import math # Объявить класс SquareEquation, решающий квадратное уравнение class SquareEquation: # Метод инициализации данных класса def __init__(self, a, b, c): # создается три члена данных класса self.a = a self.b = b self.c = c return # Метод вычисления корней уравнения def Calc(self): # d - дискриминант, дополнительная локальная переменная d = self.b*self.b - 4*self.a*self.c if (d<0): print("The equation has no roots") return [] else: # x1, x2 - локальные переменные - это не есть члены данных класса x1 = (-self.b - math.sqrt(d))/(2.0*self.a) x2 = (-self.b + math.sqrt(d))/(2.0*self.a) return [x1, x2] # Использование класса SquareEquation equation1 = SquareEquation(1, 1, -2) # конкретный экземпляр объекта result = equation1.Calc() print('result = ', result)
Результат работы программы
result = [-2.0, 1.0]
⇑
Связанные темы
⇑