Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Объектно-ориентированное программирование в Python: классы, наследование, инкапсуляция и полиморфизм

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

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

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

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

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

Объект обладает двумя существенными характеристиками:

Например, попугай — объект с атрибутами name, age, color и поведением sing() и dance().

ООП в Python способствует переиспользованию кода, следуя принципу DRY (Don't Repeat Yourself — не повторяйся).

Класс

class — это чертеж, определяющий структуру и поведение объектов. Думайте о нём как о подробном чертеже попугая: он указывает, какие свойства и действия может иметь попугай.

class Parrot:
    pass

Здесь Parrot — пустой класс. Экземпляры этого класса создаются позже.

Объект

Объект (или экземпляр) — это конкретная реализация класса. Когда класс определяется, память не выделяется; существует только шаблон. Создание экземпляра класса порождает объект.

obj = Parrot()

В примере ниже мы строим функциональный класс Parrot и создаём два экземпляра, blu и woo:

class Parrot:
    # Атрибут класса
    species = "bird"
    # Атрибуты экземпляра
    def __init__(self, name, age):
        self.name = name
        self.age = age
# Создание экземпляров
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)
# Доступ к атрибутам класса
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))
# Доступ к атрибутам экземпляра
print("{} is {} years old".format(blu.name, blu.age))
print("{} is {} years old".format(woo.name, woo.age))

Вывод

Blu is a bird
Woo is also a bird
Blu is 10 years old
Woo is 15 years old

В этом фрагменте species — атрибут класса, общий для всех попугаев, тогда как name и age — атрибуты экземпляра, уникальные для каждого объекта.

Методы

Методы — функции, определённые внутри класса, описывающие поведение объекта. Они вызываются на экземплярах класса.

class Parrot:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sing(self, song):
        return f"{self.name} sings {song}"
    def dance(self):
        return f"{self.name} is now dancing"
# Создание экземпляра и использование методов
blu = Parrot("Blu", 10)
print(blu.sing("'Happy'"))
print(blu.dance())

Вывод

Blu sings 'Happy'
Blu is now dancing

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

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

# Базовый класс
class Bird:
    def __init__(self):
        print("Bird is ready")
    def whoisThis(self):
        print("Bird")
    def swim(self):
        print("Swim faster")
# Производный класс
class Penguin(Bird):
    def __init__(self):
        super().__init__()
        print("Penguin is ready")
    def whoisThis(self):
        print("Penguin")
    def run(self):
        print("Run faster")
peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()

Вывод

Bird is ready
Penguin is ready
Penguin
Swim faster
Run faster

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

Инкапсуляция ограничивает прямой доступ к внутреннему состоянию объекта, защищая целостность данных. В Python приватные атрибуты обозначаются начальным подчёркиванием (одинарным или двойным).

class Computer:
    def __init__(self):
        self.__maxprice = 900
    def sell(self):
        print(f"Selling Price: {self.__maxprice}")
    def setMaxPrice(self, price):
        self.__maxprice = price
c = Computer()
c.sell()
# Попытка изменить напрямую
c.__maxprice = 1000
c.sell()
# Использование сеттера
c.setMaxPrice(1000)
c.sell()

Вывод

Selling Price: 900
Selling Price: 900
Selling Price: 1000

Полиморфизм

Полиморфизм позволяет объектам разных классов обрабатываться через общий интерфейс, обеспечивая гибкий код, работающий с различными типами объектов.

class Parrot:
    def fly(self):
        print("Parrot can fly")
    def swim(self):
        print("Parrot can't swim")
class Penguin:
    def fly(self):
        print("Penguin can't fly")
    def swim(self):
        print("Penguin can swim")
# Общий интерфейс
def flying_test(bird):
    bird.fly()
blu = Parrot()
peggy = Penguin()
flying_test(blu)
flying_test(peggy)

Вывод

Parrot can fly
Penguin can't fly

Ключевые выводы

Python

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Освоение типов данных в Python: практическое руководство
  3. Мастерство операторов Python: Полное руководство
  4. Словари в Python: создание, манипуляции и продвинутые техники
  5. Пользовательские исключения в Python: практическое руководство
  6. Наследование в Python: концепции, синтаксис и практические примеры
  7. Паттерн Singleton в Java: как реализовать и безопасно использовать
  8. Автоматизированное визуальное отслеживание объектов на Raspberry Pi и OpenCV
  9. Java: объекты, классы и основные концепции ООП
  10. Сериализация объектов в Java: сохранение и восстановление состояния