Объектно-ориентированное программирование на 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)