Объектно-ориентированное программирование (ООП) — возможность языков программирования, в которой пользователь может создавать шаблоны программ (классы) и их копии (объекты).
Класс — тип, описывающий устройство объектов.
Объект — это экземпляр класса. Класс можно сравнить с шаблоном по которому создаются объекты.
Пример простого класса со свойствами:
Для создания класса мы должны использовать конструкцию class.
class human:
Класс может содержать переменные — Свойства класса.
class human: name='Имя не задано' age=0 gender='Пол не задан'
Для создания объекта мы в переменную должны записать название класса с двумя круглыми скобочками.
obj1=human()
Для обращения к свойствам класса мы должны использовать точку.
obj1.name='Вася' obj1.age=10
Полный код примера программы содержащей наш первый класса и объекты.
class human: name='Имя не задано' age=0 gender='Пол не задан' obj1=human() obj2=human() obj1.name='Вася' obj1.age=10 obj2.name='Коля' obj2.age=11 print(obj1.name) print(obj1.age) print(obj2.name) print(obj2.age)
В результате выполнения программы мы распечатаем значения свойств объекта.
Конструктор класса.
Для упрощения инициализации свойств класса используется метод __init__ в который мы передаем обязательный параметр self который ссылается объект класса с которым мы работаем. После self через запятую мы перечисляем аргументы которые будем использовать для инициализации свойств класса.
Пример кода:
class human: name='Имя не задано' age=0 gender='Пол не задан' def __init__ (self, name,age): self.name = name self.age = age
Давайте протестируем наш класс.
class human: name='Имя не задано' age=0 gender='Пол не задан' def __init__ (self, name,age): self.name = name self.age = age obj1=human('Вася',10) obj2=human('Коля',10) print(obj1.name) print(obj1.age) print(obj2.name) print(obj2.age)
Используя конструктор мы значительно упростили инициализацию свойств объекта.
obj1=human('Вася',10) obj2=human('Коля',10)
Методы класса.
Давайте добавим метод print который распечатает наш класс.
class human: name='Имя не задано' age=0 gender='Пол не задан' def __init__ (self, name,age): self.name = name self.age = age def print(self): print(self.name) print(self.age) obj1=human('Вася',10) obj2=human('Коля',10) obj1.print() obj2.print()
Теперь наша программа составляет всего 4-и строчки.
obj1=human('Вася',10) obj2=human('Коля',10) obj1.print() obj2.print()
Задание:
- Создать класс компьютер.
- Создать в нем свойства отвечающие за параметры компьютера. (Операционная система, тип процессора, память, жесткий диск)
- Создать конструктор класса
- Создать метод вывода на экран.
- Создать 3-и объекта класса.
- Инициализировать их.
- Вывести на экран используя метод print.
Инкапсуляция и доступ к свойствам
Инкапсуляция является одним из ключевых понятий ООП. Инкапсуляция это механизм защиты внутренних переменных класса. К примеру нам нужно задать возраст человека в диапазоне от 18 до 65 лет. В остальных случая нужно сообщить об ошибке. Для этого нам понадобится инкапсуляция.
Для объявления защищенной или приватной переменной мы должны в начале переменой поставить два нижних подчеркивания
__x
далее определить свойство через которое мы будем получать доступ к нашей защищенной переменной
x = property(getx, setx, delx, «Свойство x»)
и описать методы set get del как указано в примере ниже.
class A: err='ok' __x=18 def __init__(self, x): self.setx(x) def getx(self): # метод для получения значения return self.__x def setx(self, value): # присваивания нового значения if value >= 18 and value <= 65: self.__x = value self.err = 'ok' else: self.err = 'ошибка' def delx(self): # удаления атрибута del self.__x x = property(getx, setx, delx, "Свойство x") # определяем x как свойство def print(self): if self.err == 'ok': print(self.x) else: print(self.err) a = A(5) a.print() # Синтаксис доступа к атрибуту при этом прежний a.x = 18 a.print() # Синтаксис доступа к атрибуту при этом прежний