Основы ООП в Python
Пример 1. Создание класса
Метод init - конструктор
Особенности
Пример 2
Пример 3
Пример 4. Конструктор с аргументами по умолчанию
Пример 5
Пример 6. Методы объектов
Параметр self
Пример 7
Изменение свойств объекта
Удаление объектов
Сравнение объектов
Пример 8
Пример 9. Составляющие класса или объекта
Вывод результата
Встроенные атрибуты класса
Локальные и глобальные переменные в классах
Пример 10
Модификаторы доступа
Пример 11
Наследование
Пример 12. Наследование
Пример 13. Полиморфизм
Перегрузка операторов сравнения
Пример 14. Перегрузка операторов
577.45K
Категория: ПрограммированиеПрограммирование

Основы ООП в Python

1. Основы ООП в Python

2. Пример 1. Создание класса

Для того, чтобы создать класс, используйте ключевое слово class.
Создадим класс с именем MyClass и свойством x:
class MyClass:
x=5
Создадим объект под названием p1, и выведем значение x:
p1 = MyClass()
print(p1.x)

3. Метод init - конструктор

• У всех классов есть функция под названием __init__(), которая
всегда выполняется при создании объекта. Используйте функцию
__init__() для добавления значений свойствам объекта или
других операций, которые необходимо выполнить, при создании
объекта.
• __init__() автоматически вызывается каждый раз при
использовании класса для создания нового объекта.

4. Особенности

• Конструктор — уникальный метод класса,
• Первый параметр конструктора во всех случаях self (ключевое слово,
которое ссылается на сам класс).
• Конструктор нужен для создания объекта.
• Конструктор передает значения аргументов свойствам создаваемого
объекта.
• В одном классе всегда только один конструктор.
• Если класс определяется не конструктором, Python предположит, что
он наследует конструктор родительского класса.
• В других языках программирования конструкторов может быть
несколько. В Python — только один.

5. Пример 2

• Для создания класса под названием Person, воспользуемся функцией __init__(), что
бы добавить значения для имени и возраста:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Василий", 36)
print(p1.name)
print(p1.age)

6. Пример 3

class Rectangle :
'Это класс Rectangle'
# Способ создания объекта (конструктор)
def __init__(self, width, height):
self.width= width
self.height = height
def getWidth(self):
return self.width
def getHeight(self):
return self.height
# Метод расчета площади.
def getArea(self):
return self.width * self.height

7.

8. Пример 4. Конструктор с аргументами по умолчанию

class Person:
# Параметры возраста и пола имеют значение по умолчанию.
def __init__(self, name, age=1, gender="Male"):
self.name = name
self.age = age
self.gender= gender
def showInfo(self):
print("Name: ", self.name)
print("Age: ", self.age)
print("Gender: ", self.gender)

9. Пример 5

from person import Person
# Создать объект Person.
aimee = Person("Aimee", 21, "Female")
aimee.showInfo()
print(" --------------- ")
# возраст по умолчанию, пол.
alice = Person( "Alice" )
alice.showInfo()
print(" --------------- ")
# Пол по умолчанию.
tran = Person("Tran", 37)
tran.showInfo()

10. Пример 6. Методы объектов

• Объекты также содержат методы. Методы в объектах — это функции, принадлежащие объекту.
• Создадим метод в классе Person.
• Добавим функцию, которая выводит приветствие, и выполним ее:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Привет, меня зовут " + self.name)
p1 = Person("Василий", 36)
p1.myfunc()

11. Параметр self

• Параметр self является ссылкой на сам класс и используется для
доступа к переменным, принадлежащим классу.
• Его не обязательно называть self, вы можете называть его как
хотите, но он должен быть первым параметром любой функции в
классе.
• Используем слова mysillyobject и abc вместо self:

12. Пример 7

class Person:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Привет, меня зовут " + abc.name)
p1 = Person("Василий", 36)
p1.myfunc()

13. Изменение свойств объекта

• Вы можете изменять свойства объектов следующим образом.
• Изменим возраст от p1 на 40:
p1.age = 40
• Свойства объектов можно удалять с помощью ключевого слова
del
del p1.age

14. Удаление объектов

• Вы можете удалить объекты, используя ключевое слово del.
del p1

15. Сравнение объектов

16.

• Оператор == нужен, чтобы узнать, ссылаются ли два объекта на
одно и то же место в памяти. Он вернет True, если это так.
Оператор != вернет True, если сравнить 2 объекта, которые
ссылаются на разные места в памяти.

17. Пример 8

from rectangle import Rectangle
r1 = Rectangle(20, 10)
r2 = Rectangle(20 , 10)
r3 = r1
# Сравните r1 и r2
test1 = r1 == r2 # --> False
# Сравните r1 и r3
test2 = r1 == r3 # --> True
print ("r1 == r2 ? ", test1)
print ("r1 == r3 ? ", test2)
print (" -------------- ")
print ("r1 != r2 ? ", r1 != r2)
print ("r1 != r3 ? ", r1 != r3)

18. Пример 9. Составляющие класса или объекта

• В Python присутствует функция dir, которая выводит список всех методов, атрибутов и
переменных класса или объекта.
from player import Player
# Вывести список атрибутов, методов и переменных объекта 'Player'
print(dir(Player))
print("\n\n")
player1 = Player("Tom", 20)
player1.address ="USA"
# Вывести список атрибутов, методов и переменных объекта 'player1'
print(dir(player1))

19. Вывод результата

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'maxAge', 'minAge']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'address', 'age', 'maxAge',
'minAge', 'name']

20. Встроенные атрибуты класса

21. Локальные и глобальные переменные в классах

• Атрибуты класса также называются переменными. В зависимости
от области видимости, переменные также могут относиться к
двум типам: локальные переменные и глобальные переменные.
• Локальные переменные
• Локальная переменная в классе — это переменная, доступ к
которой возможен только внутри блока кода, в котором она
определена. Например, если вы определите переменную внутри
метода, к нему не удастся получить доступ откуда-либо вне
метода.

22. Пример 10

class Car:
def start(self):
message = "Двигатель заведен"
return message
В скрипте выше мы создали локальную переменную message внутри метода
start() класса Car. Теперь создадим объект класса Car и попытаемся получить
доступ к локальной переменной message, как показано ниже:
car_a = Car()
print(car_a.message)
AttributeError: 'Car' object has no attribute 'message'
Это связано с тем, что мы не можем получить доступ к локальной переменной
вне блока, где эта локальная переменная была определена.

23. Модификаторы доступа

• Модификаторы доступа в Python используются для модификации области видимости
переменных по умолчанию. Есть три типа модификаторов доступов в Python ООП:
• публичный — public;
• приватный — private;
• защищенный — protected.
• Доступ к переменным с модификаторами публичного доступа открыт из любой точки вне
класса, доступ к приватным переменным открыт только внутри класса, и в случае с
защищенными переменными, доступ открыт только внутри того же пакета.
• Для создания приватной переменной, вам нужно проставить префикс двойного
подчеркивание __ с названием переменной.
• Для создания защищенной переменной, вам нужно проставить префикс из одного нижнего
подчеркивания _ с названием переменной. Для публичных переменных, вам не нужно
проставлять префиксы вообще.

24. Пример 11

class Car:
def __init__(self):
print ("Двигатель заведен")
self.name = "corolla"
self.__make = "toyota"
self._model = 1999
Здесь мы создали простой класс Car с конструктором и тремя
переменными: name, make, и model (название, марка и модель).
Переменная name является публичной, в то время как переменные make
и model являются приватными и защищенными, соответственно.

25.

• Давайте создадим объект класса Car и попытаемся получить доступ к переменной name.
Выполним следующий скрипт:
car_a = Car()
print(car_a.name)
• Так как name является публичной переменной, мы можем получить к ней доступ не из
класса. В выдаче вы увидите значение переменной name, выведенное в консоли.
• Теперь попробуем вывести значение переменной make. Выполняем следующий скрипт:
print(car_a.make)
• В выдаче мы получим следующее уведомление об ошибке:
• AttributeError: 'Car' object has no attribute 'make'

26. Наследование

• Основная идея наследования в объектно-ориентированном
программировании заключается в том, что класс может
наследовать характеристики другого класса. Класс, который
наследует другой класс, называется дочерним классом или
производным классом, и класс, который дает наследие,
называется родительским, или основным.

27. Пример 12. Наследование

# Создание класса Vehicle
class Vehicle:
def vehicle_method(self):
print("Это родительский метод из класса Vehicle")
# Создание класса Car, который наследует Vehicle
class Car(Vehicle):
def car_method(self):
print("Это метод из дочернего класса")

28.

• В скрипте выше мы создаем два класса: Vehicle и Car, который наследует класс Vehicle. Чтобы наследовать класс, вам нужно
только вписать название родительского класса внутри скобок, которая следует за названием дочернего класса. Класс
Vehicle содержит метод vehicle_method(), а дочерний класс содержит метод car_method(). Однако, так как класс Car
наследует класс Vehicle, он также наследует и метод vehicle_method().
• Рассмотрим это на практике и выполним следующий скрипт:
• Python
• car_a = Car()
• car_a.vehicle_method() # Вызываем метод родительского класса
• В этом скрипте мы создали объект класса Car вызывали метод vehicle_method() при помощи объекта класса Car. Вы можете
обратить внимание на то, что класс Car не содержит ни одного метода vehicle_method(), но так как он унаследовал класс
Vehicle, который содержит vehicle_method(), класс Car также будет использовать его. Выдача выглядит следующим
образом:
• Python
• Это родительский метод из класса Vehicle

29.

30. Пример 13. Полиморфизм

• Термин полиморфизм буквально означает наличие нескольких форм. В контексте объектно-ориентированного
программирования, полиморфизм означает способность объекта вести себя по-разному.
• Полиморфизм в программировании реализуется через перегрузку метода, либо через его переопределение.
• Перегрузка метода
• Перегрузка метода относится к свойству метода вести себя по-разному, в зависимости от количества или типа параметров.
Взглянем на очень простой пример перегрузки метода. Выполним следующий скрипт:
# создаем класс Car
class Car:
def start(self, a, b=None):
if b is not None:
print (a + b)
else:
print (a)

31.

32.

33. Перегрузка операторов сравнения

34. Пример 14. Перегрузка операторов

English     Русский Правила