В этой статье мы обсудим объектно-ориентированное программирование (ООП) в Python. Мы обсудим классы и объекты и узнаем, как создать класс с его собственными свойствами и методами, а затем увидим, как создать экземпляр (объект) из этого класса.

Для этой статьи наша задача — создать модель для продуктов в интернет-магазине, чтобы управлять ими. Давайте посмотрим, как мы можем сделать это с помощью ООП!

Исходный код этой статьи можно скачать из моего репозитория GitHub Python.

Давайте начнем!

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

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

Повторно используемая часть кода конструируется в один объект, и его план будет называться классом. Этот класс можно использовать для создания объектов.

Не волнуйтесь, мы скоро поймем, что это значит.

Давайте сначала исследуем объекты!

Что такое объект?

В большинстве реальных приложений нам нужны более сложные типы, чем наши примитивные типы данных (int, string… и т. д.). У нас есть такие вещи, как: клиент или продукт, например.

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

Объект может представлять любую сущность в реальном мире, такую ​​как продукт, или абстрактную вещь, такую ​​как линия или валюта и т. д.

Свойства объекта

У объекта есть такие свойства, как имя человека объекта, цвет строки объекта, цена продукта и т. д.

Методы объекта

Также у объекта есть свои методы, определяющие его поведение, например, метод draw() для объекта линии или метод apply_discount() для объекта продукта.

Теперь код проекта объектов, который позволяет нам создавать их и использовать в наших программах, называется классом.

Что такое класс?

Как мы уже сказали, это план объекта, он несет в себе определение свойств и методов этого объекта.

Класс также будет действовать как тип, который мы используем для создания наших объектов, где созданный объект будет называться экземпляром этого класса.

Возьмем этот пример, у нас есть интернет-магазин, в котором есть много товаров. Для простоты предположим, что у продукта есть только свойство «бренд» и «цена». Мы хотим написать программу, которая управляет нашим магазином.

Как мы можем смоделировать продукт в нашем примере?

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

product_brand_1 = "lenovo"
product_price_1 = 1200

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

Итак, вместо этого мы создадим наш новый тип с именем Product, который является просто классом, а затем мы сможем создать из него столько продуктов, сколько объектов.

Давайте сделаем это, чтобы понять идею более глубоко!

Создание класса в Python

Чтобы создать класс в Python, мы просто используем ключевое слово «class», за которым следует имя класса, например, чтобы создать наш класс Product, который мы пишем:

class Product:

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

Итак, до сих пор в памяти не существует объекта типа Product, верно? Здорово.

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

Функция __init__:

Внутри класса мы определяем встроенную функцию с именем __init__. Эта функция выполняется после создания объекта из этого класса, поэтому мы будем использовать ее для одновременного определения свойств и присвоения им значений.

Нам не нужно явно определять свойства объекта вне этой функции.

Для нашего класса Product мы хотим иметь два свойства: бренд и цену, поэтому мы будем передавать значения, которые мы хотим присвоить им при создании, в качестве параметров:

def __init__(self, brand, price):

Переменная «self» является первым параметром, она будет ссылаться на этот экземпляр класса, чтобы функция могла получить доступ к свойствам, мы можем назвать ее любым именем, если захотим, но она должна быть первым параметром.

Мы помещаем любой код для инициализации внутрь __init__, поэтому теперь мы будем назначать свойства объекта с параметрами, используя переменную self.

Чтобы сослаться на свойство объекта, например, brand, мы пишем self.brand, а затем присваиваем ему параметр brand.

Мы сохранили те же имена для удобства, но мы могли выбрать любое имя для нашего свойства объекта в левой части. Например, мы могли бы написать:

self.brand_name = brand

И тогда свойство объекта будет называться brand_name.

Полное определение класса с двумя свойствами будет таким:

class Product:
    def __init__(self, brand, price):
        self.brand = brand
        self.price = price

Создание экземпляра или объекта в Python

Определенный выше класс Product служит типом, из которого мы можем создавать множество объектов. Подобно тому, что мы делаем, когда создаем экземпляр или объект из существующего типа, такого как список.

Теперь у нас есть собственный тип Product для этого, поэтому для создания объекта или экземпляра продукта мы просто пишем:

Product("Lenovo", 1200)

То, что создает объект и вызывает функцию __init__, которую мы видели выше. Во многих языках он называется конструктором.

Однако этот объект является анонимным, что может быть полезно в определенных ситуациях, но если нам нужно отслеживать его, мы должны присвоить его переменной, например, p1.

p1 = Product("Lenovo", 1200)

Итак, теперь p1 — это ссылка, указывающая на объект.

Доступ к свойствам объекта в Python

Мы можем получить доступ к свойствам объекта в Python, используя точку «.» аксессор, мы можем либо прочитать, либо изменить значение свойства. Например, изменим цену p1:

p1.price = 1400

Таким же образом мы можем прочитать значения свойств объекта, например:

print(p1.brand, p1.price)

Определение методов объекта в Python

Методы объекта — это функции, принадлежащие объекту.

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

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

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

Мы определяем метод как любую функцию, но добавляем параметр «я», если хотим, чтобы иметь доступ к свойствам объекта.

Здесь мы изменяем значение цены объекта, применяя скидку, переданную в качестве параметра.

def apply_discount(self, discount):
        self.price = self.price * discount/100

Как вызвать метод объекта в Python?

Для вызова методов объекта мы также используем метод доступа точка (.), аналогичный способу доступа к свойствам объекта. Например, чтобы вызвать нашу функцию apply_discount, мы будем использовать созданный экземпляр p1:

p1.apply_discount(50)

Если мы напечатаем значение p1.price, мы увидим, что цена изменилась:

p1.apply_discount(50) #applying discount
print("Price after discount: ", p1.price)

Вывод будет таким:

Price after discount:  700.0

Мы также можем вызвать функцию, используя имя класса Product и установив в качестве первого параметра объект, который нам нужен, чтобы изменить его цену:

p1 = Product("Lenovo", 1200)
Product.apply_discount(p1, 30)

Полный код

class Product:
    def __init__(self, brand, price):
        self.brand = brand
        self.price = price

    def apply_discount(self, discount):
        self.price = self.price * discount/100
        
p1 = Product("Lenovo", 1200)
print(p1.brand, "original price: ", p1.price)

p1.price = 1400 #modifying price

p1.apply_discount(50) #applying discount
print("Price after discount: ", p1.price)

Вывод

В этой статье мы рассмотрели объектно-ориентированное программирование. Мы узнали о классах и объектах в Python, увидели, как создать класс со свойствами и методами. Мы также увидели, как создать экземпляр (объект) из этого класса и как получить доступ к свойствам объекта и вызвать его методы из нашего кода.

В первой части этой серии мы установили Python, в второй части мы установили VS Code и написали нашу первую программу, в части в третьей мы узнали о переменных и о том, как читать входные данные от пользователей нашего приложения, в четвертой части мы обсудили операторы if. в пятой части мы узнали о циклах while, в шестой части мы увидели циклы for и вложенные циклы, в седьмой части мы обсуждали списки, в восьмой части мы исследовали функции.

Подпишитесь на меня, чтобы узнать больше о программированииСари Лаккис

Читайте также