Объектно-ориентированное программирование (ООП) — возможность языков программирования, в которой пользователь может создавать шаблоны программ (классы) и их копии (объекты).
Класс — тип, описывающий устройство объектов.
Объект — это экземпляр класса. Класс можно сравнить с шаблоном по которому создаются объекты.
Пример простого класса со свойствами:
Для создания класса мы должны использовать конструкцию 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() # Синтаксис доступа к атрибуту при этом прежний