Объектно-ориентированное программирование на Python

Все в python является объектом. Классы, функции и даже простые типы данных, такие как целые числа и числа с плавающей запятой.

Объектно-ориентированное программирование делает программу простой и эффективной для понимания. Используйте его с умом, чтобы ускорить и упростить разработку! ООП имеет несколько преимуществ, таких как возможность многократного использования, ремонтопригодность, простота расширения, гибкость и безопасность и т. Д. Подробнее о преимуществах см. В этой статье EDUCBA: Преимущество ООП.

В этой статье будут представлены три основные концепции объектно-ориентированного программирования и принципы их работы:

Наследование, инкапсуляция и полиморфизм

В качестве примера мы создадим класс Employee. В этом случае класс Employee имеет два атрибута: name и age, а также два метода: описание и говори.

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def description(self):
        return '{} is {} years old.'.format(self.name, self.age)
    def speak(self, sound):
        return '{} says {}.'.format(self.name, sound)

Выход

#instantiate the Employee class
allie = Employee('Allie', 10)
print(allie.name)
print(allie.age)
print(allie.description())
print(allie.speak('Good Morning'))
print(allie.speak('Good bye'))
>>>>>>>>>>
Allie
10
Allie is 10 years old.
Allie says Good Morning.
Allie says Good bye.

вы также можете изменить значение age, просто используя этот код:

allie.age = 5
allie.age
>>>  5

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

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

дочерние классы будут наследовать родительские классы, которые могут использовать атрибут и метод, определенные в родительском классе, кроме того, он может расширять функции родительского класса, добавляя новый атрибут. или метод.

Теперь у нас есть два разных дочерних класса: Manager и Boss, и у них есть свои собственные новые методы supervise и fire. по отдельности, одновременно, они оба переопределяют метод speak.

class Manager(Employee):
    #add new method
    def supervise(self):
        return '{} is supervising'.format(self.name)
    
class Boss(Employee):
    #add new method
    def fire(self):
        return '{} is firing employee'.format(self.name)

Выход

ben = Manager('Ben', 20)
print(ben.description())
print(ben.speak('go to work'))
print(ben.supervise())
cole = Boss('Cole', 30)
print(cole.description())
print(cole.speak('well done guys'))
print(cole.fire())
>>>>>>
Ben is 20 years old.
Ben says go to work.
Ben is supervising
Cole is 30 years old.
Cole says well done guys.
Cole is firing employee

Инкапсуляция

Объект может ограничивать доступ к методам и атрибутам. Это предотвращает направление изменений другими пользователями. Мы определяем частные переменные, используя _ или __ в качестве префикса.

Теперь создайте новый частный атрибут с именем __salary и два метода заработать () и setSalary (), ссылаясь на код, как показано ниже.

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.__salary = 100
        
    def earn(self):
        return '{} earns {}.'.format(self.name, self.__salary)
   
    def setSalary(self, salary):
        self.__salary = salary

Выход

allie = Employee('Allie', 10)
print(allie.earn())
allie.__salary = 200
print(allie.earn())
allie.setSalary(200)
print(allie.earn())
>>>>>>
Allie earns 100.
Allie earns 100.
Allie earns 200.

Мы не могли изменить значение напрямую, в качестве альтернативы мы должны использовать функцию установки setSalary () для достижения цели.

Полиморфизм

При определении метода с тем же именем в разных классах python будет вызывать действие метода на основе самого класса.

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def work(self):
        return 'Employee work'
    
class Manager(Employee):
    #polymorphsm
    def work(self):
        return 'Manager work'
    
class Boss(Employee):
    #polymorphsm
    def work(self):
        return 'Boss work'

Выход

allie = Employee('Allie', 10)
ben = Manager('Ben', 20)
cole = Boss('Cole', 30)
print(allie.work())
print(ben.work())
print(cole.work())
>>>>>>>>
Employee work
Manager work
Boss work

Я превратил приведенный выше код в файл ipynb (документ Jupyter Notebook) и загрузил его на свой Github. Всем, кто хочет попрактиковаться, не стесняйтесь посетить и скачать этот ресурс.
https://github.com/alliehsu05/Python_OOP_Practice1

Следующие ссылки также помогают лучше понять эти три концепции:
Объектно-ориентированное программирование (ООП) в Python 3 из Real Python;
Объектно-ориентированное программирование Python из Programiz.

Вы также можете узнать о

Полезные приемы Python, которые следует знать перед собеседованием по программированию

Git Rebase - мощная команда, которая выводит ваши навыки работы с Git на новый уровень (часть II)