English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете о面向 объектном программировании (OOP) в Python и его базовых концепциях через примеры.
Python является многопарадигмальным языком программирования. Это означает, что он поддерживает различные методы программирования.
Одним из популярных методов решения программных проблем является создание объектов. Это так называемое面向 объектное программирование (OOP).
Объект имеет две характеристики:
Атрибуты
Бehavior
Давайте举个 пример:
Попугай является объектом,
Имя, возраст, цвет - это атрибуты
Петь, танцевать - это поведение
Концепция OOP в Python сосредоточена на создании повторно используемого кода. Этот концепт также называется DRY (Don't Repeat Yourself) - Не повторяйся.
В Python концепция OOP следует некоторым базовым принципам:
Инheritance | Процесс использования详细信息 нового класса без изменения существующего класса. |
Encapsulation | Скрытие частных细节 класса от других объектов. |
Полиморфизм | Концепция использования универсальных операций по-разному для различных данных. |
Класс является шаблоном объекта.
Мы можем рассматривать класс как набросок с меткой попугая. Он содержит все详细信息 о名称, цвете, размере и т.д. На основе этих описаний мы можем изучать попугая. Здесь попугай является объектом.
Пример класса попугая может быть следующим:
class Parrot: pass
Здесь мы используем ключевое слово class для определения пустого класса Parrot. Мы создаем пример из класса. Пример - это объект, созданный определенным классом.
Объект (пример) является примером класса. При определении класса определяется описание объекта. Таким образом, не выделяется память или хранение.
Пример объекта класса попугая может быть следующим:
obj = Parrot()
Здесь obj является объектом класса Parrot.
Предположим, что у нас есть подробная информация о попугае. Ниже мы покажем, как создать класс и объект попугая.
class Parrot: # Классовые атрибуты species = "птица" # Примерные свойства def __init__(self, name, age): self.name = name self.age = age # Примеризация класса Parrot blu = Parrot("Синица", 10) woo = Parrot("Папуга", 15) # Доступ к свойствам класса print("Синица — {}".format(blu.__class__.species)) print("Папуга также {}".format(woo.__class__.species)) # Доступ к свойствам примера print("{} имеет {} лет".format(blu.name, blu.age)) print("{} имеет {} лет".format(woo.name, woo.age))
Когда мы запустим программу, вывод будет:
Синица — птица Папуга также птица Синица 10 лет Папуга 15 лет
В предыдущем примере мы создали объект с именемParrotкласс. Затем мы определяем свойства. Свойства — это характеристики объекта.
затем мы создаемParrotПример класса. Здесь,bluиwooявляется ссылкой (значением) на наш новый объект.
Затем мы используем class .species для доступа к свойствам класса. Классовые свойства всех примеров класса одинаковы. Аналогично, мы используем blu.name и blu.age для доступа к свойствам примера. Но для каждого примера класса свойственные свойства различаются.
Чтобы узнать больше о классах и объектах, перейдите вPython классы и объекты.
Методы — это функции, определенные в теле класса. Они используются для определения поведения объектов.
class Parrot: # Примерные свойства def __init__(self, name, age): self.name = name self.age = age # Примерные методы def sing(self, song): return "{} поет {}".format(self.name, song) def dance(self): return "{} танцует".format(self.name) # Пример объекта blu = Parrot("Blu", 10) # Вызов наших примерных методов print(blu.sing("'Happy'")) print(blu.dance())
Когда мы запустим программу, вывод будет:
Blu поет 'Happy' Blu танцует
В предыдущем примере мы определили два метода, namely sing() и dance(). Они называются примерными методами, потому что они вызываются на примерном объекте (то есть на blu).
Наследование - это метод создания нового класса, который используется для использования существующего класса без изменения его деталей. Новообразованный класс является производным классом (или дочерним классом). Аналогично, существующий класс является базовым классом (или родительским классом).
# Основной класс class Bird: def __init__(self): print("Птица готов") def whoisThis(self): print("Птица") def swim(self): print("Плавает быстрее") # Дочерний класс class Penguin(Bird): def __init__(self): # Вызов функции super() super().__init__() print("Пингвин готов") def whoisThis(self): print("Пингвин") def run(self): print("Бегает быстрее") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()
Когда мы запускаем этот программ, вывод будет:
Птица готов Пингвин готов Пингвин Плавает быстрее Бегает быстрее
В этом примере мы создали два класса, то естьПтица(Родительский класс) иPenguin(Дочерний класс). Дочерний класс наследует функции родительского класса. Мы можем увидеть это из метода swim(). Дочерний класс снова изменяет поведение родительского класса. Мы можем увидеть это из метода whoisThis(). Кроме того, мы создаем новый метод run() для расширения функций родительского класса.
Кроме того, мы используем функцию super() перед init() методом. Это потому, что мы хотим передать содержимое init() метода из родительского класса в дочерний класс.
В Python с использованием OOP, мы можем ограничить доступ к методам и переменным. Это предотвращает прямое изменение данных (называемое объединением данных). В Python мы используем подчеркивание в начале для обозначения частных свойств, то есть одиночное "_" или двойное "__".
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Цена: 1000") def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # Изменение цены c.__maxprice = 1000 c.sell() # Использование функции setter c.setMaxPrice(1000) c.sell()
Когда мы запускаем этот программ, вывод будет:
Цена: 900 Цена: 900 Цена: 1000
В上面的 программе мы определилиComputerкласс. Мы используем метод __init__() для хранения максимальной цены компьютера. Мы пытаемся изменить цену. Но мы не можем изменить её, потому что Python будет__maxprice视为私有 атрибут. Чтобы изменить это значение, мы используем функцию setter, то есть setMaxPrice(), которая принимает price в качестве параметра.
Полиморфизм - это функция (в OOP), которая может использовать общие интерфейсы для различных форм (типов данных).
Предположим, что нам нужно покрасить форму, у нас есть несколько вариантов форм (rectangle, square, circle). Но мы можем использовать один и тот же метод для окраски любой формы. Этот концепция называется полиморфизмом.
class Parrot: def fly(self): print("Папуги могут летать") def swim(self): print("Папуги не могут плавать") class Penguin: def fly(self): print("Пингвины не могут летать") def swim(self): print("Пингвины могут плавать") # Общий интерфейс def flying_test(bird): bird.fly() #Примеризация объекта blu = Parrot() peggy = Penguin() # Передача объекта flying_test(blu) flying_test(peggy)
Когда мы запустим上面的 программу, вывод будет:
Папуги могут летать Пингвины не могут летать
В上面的 программе мы определили два классаParrotиPenguin. У каждого из них есть общая метод fly(). Но их функции различаются. Чтобы обеспечить полиморфизм, мы создали общую интерфейс, то есть функция flying_test() может принимать любую функцию объекта. Затем мы передали в функцию flying_test():bluиpeggyОбъект, который эффективно работает.
Сделайте программирование простым и эффективным.
Классы могут быть совместно использованы, поэтому код можно повторно использовать.
Повысить продуктивность программистов
Данные защищены за счет абстракции.