Какие принципы ООП существуют

machine learning курсы, python machine learning уроки, курсы по машинному обучению, предобработка данных python, курс машинное обучение на python, открытый курс машинного обучения, бесплатный курс по питон, nlp python, курс машинное обучение на python, курс по подготовке данных, курс машинное обучение на python, открытый курс машинного обучения, бесплатный курс по питон, nlp python, курс машинное обучение на python, курс по подготовке данных

В прошлый раз мы говорили про особенности ООП в Python. Сегодня рассмотрим базовые принципы ООП и их применение в этом популярном языке программирования на практических примерах.

Основные принципы ООП в языке Python

Python — один из самых популярных языков программирования в мире. Он известен своей простотой и легкостью в использовании. Данный язык предлагает различные концепции объектно-ориентированного программирования (ООП), такие как:

  • наследование — это концепция ООП, которая позволяет создавать новые классы на основе существующих. Класс, который наследует свойства и методы от другого класса, называется подклассом (или классом-потомком), а класс, от которого он наследует, называется суперклассом (или классом-родителем). Подкласс может добавлять новые свойства и методы или изменять существующие. Наследование позволяет повторно использовать код и уменьшать количество дублированного кода.
  • инкапсуляция — это концепция ООП, которая позволяет скрыть детали реализации и защитить данные от изменений извне.
  • полиморфизм — это концепция ООП, которая основана на наследовании и позволяет использовать объекты разных классов, но имеющих схожее поведение. Например, каждое животное может издавать какие-то звуки. Однако такое животное, как собака обычно издает звук «Гав!», а кошка — звук «Мяу». Иными словами, полиморфизм — это переопределение методов, унаследованных от суперкласса в подклассах.

Каждую из этих концепций мы подробно рассмотрим далее.

Особенности применения принципов ООП: несколько практических примеров

В Python наследование реализуется путем указания суперкласса в круглых скобках после имени класса. Например, чтобы создать класс подкласса, который наследует свойства и методы от суперкласса Animal, мы можем использовать следующий код:

class Animal:
    def run(self):
        print ('Running')

class Dog(Animal):
    def runAsDog(self):
        super().run()

Ключевое слово super в Python используется для вызова методов родительского класса в дочернем классе.

Как уже отмечалось выше, в основе полиморфизма лежит переопределение методов суперкласса подклассах:

class Animal:
    def run(self):
        return 'Running'

class Dog(Animal):
    def run(self):
        return 'Running like a dog'

class Cat(Animal):
    pass

В данном примере видно, что метод run() был переопределен в подклассе Dog, но не был переопределен в подклассе Cat. Следовательно, при создании экземпляров реализация данного метода в них будет отличаться: класс Cat унаследовал его и не переопределил его, а класс Dog унаследовал его и переопределил (задал собственную реализацию).

dog = Dog()
cat = Cat()
print(dog.run()) # Running like a dog
print(cat.run()) # Running

Стоит также отметить, что при наследовании в Python автоматически наследуются все методы суперкласса.

В Python инкапсуляция достигается путем использования двух подчеркиваний (private) перед именем переменной или метода, или же одного подчеркивания (protected) перед ними. Рассмотрим на следующем примере:

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance
    
    def get_balance(self):
        return self.__balance
    
    def _do(self):
        return 'Do something'
    
    
    def set_balance(self, balance):
        self.__balance = balance

В примере выше мы создаем класс BankAccount, который содержит переменную balance. Мы используем два подчеркивания перед именем переменной, чтобы сделать ее приватной. Теперь эта переменная не может быть напрямую изменена вне класса. Для того, чтобы иметь доступ к приватным переменным, можно использовать геттеры (get) и сеттеры (set). Геттеры — это методы, которые возвращают значение приватной переменной, а сеттеры — это методы, которые устанавливают значение приватной переменной. Здесь мы добавили методы get_balance и set_balance, которые позволяют получить и установить значение переменной balance:

k=BankAccount(20)
print(k.get_balance()) # 20
k.set_balance(30)
print(k.get_balance()) # 30

Как уже отмечалось выше, в Python есть 2 вида защищенности:

  • private — двойное подчеркивание, которое говорит о том, что напрямую к приватному элементу можно обратиться можно только внутри класса;
  • protected — нижнее подчеркивание, которое говорит о том, что напрямую к защищенному элементу можно обратиться вне класса, но при условии соблюдения данного подчеркивания.

В качестве примера рассмотрим обращение в protected-методу из примера выше:

k=BankAccount(20)
k._do()

Подобным образом можно обращаться также к protected-переменным без геттеров и сеттеров. Но для того, чтобы обратиться к приватным методам извне, следует делать это следующим образом:

k=BankAccount(20)
k._BankAccount__do()

Данный способ называется изменением имени. Изменение имени (name mangling) — это процесс, в котором любой заданный идентификатор с одним конечным подчеркиванием и двумя ведущими подчеркиваниями текстуально заменяется на __ClassName__Identifier. Есть еще один способ — это реализация метода, который отвечает за вызов приватного метода (на подобии геттеров):

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance
    
    def get_balance(self):
        return self.__balance
    
    def __do(self):
        return 'Do something'
    
    def call_do(self):
        return self.__do()
    
    def set_balance(self, balance):
        self.__balance = balance

Теперь мы просто вызываем наш приватный метод через реализованный метод вызова следующим образом:

k=BankAccount(20)
k.call_do()

Таким образом, благодаря поддержке механизма ООП, Python позволяет создавать модули, которые могут быть легко заменены и использованы заново, что упрощает разработку, тестирование и сопровождение кода. Это делает Python универсальным и надежным средством для работы с производительными приложениями, а также с Big Data обработкой.

Computer vision на Python

Код курса
VISI
Ближайшая дата курса
29 июля, 2024
Продолжительность
40 ак.часов
Стоимость обучения
90 000 руб.

Освоить Python на профессиональном уровне в разработчика различных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:

Записаться на курс

Смотреть раcписание

Добавить комментарий

Поиск по сайту