Определение простого объекта

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Цели этого практического занятия включают изучение определения простого класса Python, понимание атрибутов и методов класса, создание экземпляров класса и взаимодействие с ними, а также применение форматирования для отображения информации об объектах. Файл stock.py будет создан в ходе этого практического занятия.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/constructor("Constructor") python/ObjectOrientedProgrammingGroup -.-> python/encapsulation("Encapsulation") subgraph Lab Skills python/strings -.-> lab-132394{{"Определение простого объекта"}} python/function_definition -.-> lab-132394{{"Определение простого объекта"}} python/classes_objects -.-> lab-132394{{"Определение простого объекта"}} python/constructor -.-> lab-132394{{"Определение простого объекта"}} python/encapsulation -.-> lab-132394{{"Определение простого объекта"}} end

Понимание классов Python

В Python класс представляет собой шаблон для создания объектов. Объектно-ориентированное программирование — это мощный подход, который позволяет нам эффективно организовать наш код. Он делает это, группируя связанные данные и функции вместе. Таким образом, мы можем более легко управлять сложными программами и сделать наш код более модульным и поддерживаемым.

Класс Python состоит из двух основных компонентов:

  • Атрибуты: Это переменные, которые хранят данные внутри класса. Представьте себе атрибуты как характеристики или свойства объекта. Например, если мы создаем класс для представления человека, атрибутами могут быть имя, возраст и рост человека.
  • Методы: Это функции, которые принадлежат классу и могут обращаться к его атрибутам или изменять их. Методы определяют действия, которые объект может выполнять. В примере с классом человека методом может быть функция, которая вычисляет возраст человека в месяцах.

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

Вот базовая структура класса Python:

class ClassName:
    def __init__(self, parameter1, parameter2):
        self.attribute1 = parameter1
        self.attribute2 = parameter2

    def method_name(self):
        ## Code that uses the attributes
        return result

Метод __init__ — это специальный метод в классах Python. Он вызывается автоматически, когда мы создаем новый объект из класса. Этот метод используется для инициализации атрибутов объекта. Параметр self является ссылкой на экземпляр класса. Он используется для доступа к атрибутам и методам изнутри класса. Когда мы вызываем метод у объекта, Python автоматически передает сам объект в качестве первого аргумента, поэтому мы используем self в определениях методов. Это позволяет нам работать с атрибутами конкретного экземпляра и выполнять операции над ними.

✨ Проверить решение и практиковаться

Создание класса Stock

В Python класс представляет собой шаблон для создания объектов. Он позволяет вам объединять данные и функциональность. Теперь давайте создадим наш класс Stock для представления информации о ценных бумагах (акциях). Акция имеет определенные характеристики, такие как ее название, количество акций и цена за одну акцию. Мы определим атрибуты для этих аспектов внутри нашего класса.

  1. Сначала вам нужно находиться в правильной директории в WebIDE. Если вы еще не в директории /home/labex/project, перейдите в нее. Именно здесь мы будем работать над кодом нашего класса Stock.

  2. Как только вы окажетесь в правильной директории, создайте новый файл в редакторе. Назовите этот файл stock.py. Этот файл будет содержать код нашего класса Stock.

  3. Теперь давайте добавим код для определения класса Stock. Скопируйте и вставьте следующий код в файл stock.py:

class Stock:
    def __init__(self, name, shares, price):
        self.name = name
        self.shares = shares
        self.price = price

    def cost(self):
        return self.shares * self.price

В этом коде:

  • Строка class Stock: создает новый класс с именем Stock. Это похоже на шаблон для создания объектов-акций.
  • Метод __init__ — это специальный метод в классах Python. Он называется конструктором. Когда вы создаете новый объект класса Stock, метод __init__ запустится автоматически. Он принимает три параметра: name, shares и price. Эти параметры представляют информацию об акции.
  • Внутри метода __init__ мы используем self для ссылки на экземпляр класса. Мы сохраняем значения параметров как атрибуты экземпляра. Например, self.name = name сохраняет параметр name как атрибут объекта.
  • Метод cost() — это пользовательский метод, который мы определили. Он вычисляет общую стоимость акций, умножая количество акций (self.shares) на цену за одну акцию (self.price).
  1. После добавления кода сохраните файл. Вы можете сделать это, нажав Ctrl+S или кликнув на иконку сохранения. Сохранение файла гарантирует, что ваши изменения будут сохранены.

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

  • Мы определили класс с именем Stock. Этот класс будет использоваться для создания объектов-акций.
  • Метод __init__ принимает три параметра: name, shares и price. Он инициализирует атрибуты объекта этими значениями.
  • Внутри __init__ мы сохраняем эти параметры как атрибуты экземпляра, используя self. Это позволяет каждому объекту иметь свою собственную набор значений для этих атрибутов.
  • Мы добавили метод cost(), который вычисляет общую стоимость, умножая количество акций на цену. Это полезная функциональность для наших объектов-акций.

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

✨ Проверить решение и практиковаться

Создание объектов Stock

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

  1. Сначала нам нужно открыть терминал в WebIDE. Терминал похож на командный центр, где мы можем давать инструкции компьютеру. Чтобы открыть его, нажмите на "Terminal" в меню.

  2. Как только терминал открыт, нам нужно убедиться, что мы находимся в правильной директории проекта. Директория проекта — это место, где хранятся все соответствующие файлы нашего проекта. Если вы еще не в директории проекта, используйте следующую команду, чтобы перейти туда:

cd /home/labex/project
  1. Теперь мы хотим запустить Python в интерактивном режиме с нашим файлом stock.py. Интерактивный режим позволяет нам пошагово тестировать наш код и сразу видеть результаты. Файл stock.py содержит определение нашего класса Stock. Используйте следующую команду:
python3 -i stock.py

Флаг -i здесь очень важен. Он сообщает Python сначала запустить скрипт stock.py. После запуска скрипта он запускает интерактивную сессию. В этой сессии мы можем обращаться к любым классам и переменным, которые были определены в скрипте stock.py.

  1. Давайте создадим новый объект Stock для акций Google. Создание объекта похоже на создание конкретного экземпляра класса Stock с определенными значениями. Используйте следующий код:
s = Stock('GOOG', 100, 490.10)

Эта строка кода создает новый экземпляр класса Stock. Вот что означает каждое значение:

  • Название: 'GOOG' — это символ для акций Google.
  • Количество акций: 100 — это количество акций Google, которые у нас есть.
  • Цена: 490.10 — это цена за одну акцию Google.
  1. Теперь, когда у нас есть объект Stock, мы можем обращаться к его атрибутам. Атрибуты похожи на свойства объекта. Чтобы обратиться к атрибуту, мы используем имя объекта, за которым следует точка и имя атрибута.
s.name

Когда вы запустите этот код, он выведет название акции:

'GOOG'

Давайте обратимся к количеству акций:

s.shares

Результатом будет количество акций, которое мы определили:

100

Наконец, давайте обратимся к цене за одну акцию:

s.price

Результатом будет цена за одну акцию:

490.1
  1. Наш класс Stock имеет метод с именем cost(). Метод похож на действие, которое объект может выполнить. В данном случае метод cost() вычисляет общую стоимость наших акций. Чтобы вызвать этот метод, используйте следующий код:
s.cost()

Результатом будет общая стоимость:

49010.0

Метод cost() работает путем умножения количества акций (100) на цену за одну акцию (490.10), что дает нам 49010.0.

✨ Проверить решение и практиковаться

Работа с несколькими объектами Stock

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

  1. С запущенной интерактивной сессией Python мы создадим еще один объект Stock. На этот раз он будет представлять IBM. Чтобы создать экземпляр класса Stock, мы вызываем имя класса, как если бы это была функция, и передаем необходимые аргументы. Аргументами здесь являются название акции, количество акций и цена за одну акцию.
t = Stock('IBM', 50, 91.5)

В этой строке кода мы создаем новый объект Stock с именем t, который представляет IBM. Он имеет 50 акций, и каждая акция стоит $91.5.

  1. Теперь мы хотим вычислить стоимость этой новой акции. Класс Stock имеет метод с именем cost(), который вычисляет общую стоимость акций, умножая количество акций на цену за одну акцию.
t.cost()

Когда вы запустите этот код, Python вызовет метод cost() для объекта t и вернет общую стоимость.

Результат:

4575.0
  1. Мы можем отформатировать и отобразить информацию о наших акциях в удобном и организованном виде, используя строковое форматирование в Python. Строковое форматирование позволяет нам указать, как разные типы данных должны быть представлены в строке.
print('%10s %10d %10.2f' % (s.name, s.shares, s.price))

В этом коде мы используем старый стиль строкового форматирования в Python. Оператор % используется для подстановки значений в строковый шаблон. Строковый шаблон '%10s %10d %10.2f' определяет, как должны быть отформатированы название акции, количество акций и цена.

Результат:

      GOOG        100     490.10

Эта отформатированная строка работает следующим образом:

  • %10s форматирует строку в поле шириной 10 символов (выравнивание по правому краю). Это означает, что название акции будет помещено в пространство шириной 10 символов и будет выровнено по правому краю этого пространства.
  • %10d форматирует целое число в поле шириной 10 символов. Таким образом, количество акций будет помещено в пространство шириной 10 символов.
  • %10.2f форматирует число с плавающей точкой с двумя знаками после запятой в поле шириной 10 символов. Цена будет показана с двумя знаками после запятой и помещена в пространство шириной 10 символов.
  1. Теперь давайте отформатируем информацию об акциях IBM таким же образом. Мы просто должны заменить имя объекта с s на t в коде строкового форматирования.
print('%10s %10d %10.2f' % (t.name, t.shares, t.price))

Результат:

       IBM         50      91.50
  1. В современном Python мы также можем использовать f-строки для форматирования. F-строки более читаемы и легче в использовании. Давайте сравним стоимости обеих акций с помощью f-строк.
print(f"Google stock costs ${s.cost()}, IBM stock costs ${t.cost()}")

В этой f-строке мы напрямую встраиваем выражения в фигурные скобки {}. Python вычислит эти выражения и вставит результаты в строку.

Результат:

Google stock costs $49010.0, IBM stock costs $4575.0
  1. Когда вы закончите экспериментировать, пришло время выйти из интерактивного режима Python. Вы можете сделать это, используя функцию exit().
exit()

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

✨ Проверить решение и практиковаться

Улучшение класса Stock

В Python классы представляют собой мощный способ организации данных и поведения. Они позволяют нам группировать связанные данные и функции вместе. В этом разделе мы усовершенствуем наш класс Stock, добавив метод, который выводит отформатированную информацию о акциях. Это отличный пример того, как мы можем инкапсулировать как данные, так и поведение в наших классах. Инкапсуляция означает объединение данных с методами, которые работают с этими данными, что помогает держать наш код организованным и легким в управлении.

  1. Сначала вам нужно открыть файл stock.py в редакторе WebIDE. Файл stock.py - это место, где мы работали над нашим классом Stock. Открытие его в редакторе позволяет нам внести изменения в определение класса.

  2. Теперь мы изменим класс Stock, добавив новый метод display(). Этот метод будет отвечать за вывод информации о акциях в удобно отформатированном виде. Вот как вы можете сделать это:

class Stock:
    def __init__(self, name, shares, price):
        self.name = name
        self.shares = shares
        self.price = price

    def cost(self):
        return self.shares * self.price

    def display(self):
        print(f"Stock: {self.name}, Shares: {self.shares}, Price: ${self.price:.2f}, Total Cost: ${self.cost():.2f}")

В методе __init__ мы инициализируем название акции, количество акций и цену. Метод cost вычисляет общую стоимость акций, умножая количество акций на цену. Новый метод display использует f-строку для форматирования и вывода информации о акциях, включая название, количество акций, цену и общую стоимость.

  1. После внесения этих изменений вам нужно сохранить файл. Вы можете сделать это, нажав Ctrl+S на клавиатуре или кликнув на значок сохранения в редакторе. Сохранение файла гарантирует, что ваши изменения будут сохранены и могут быть использованы позже.

  2. Далее мы запустим новую интерактивную сессию Python. Интерактивная сессия позволяет нам сразу же протестировать наш код. Чтобы запустить сессию, выполните следующую команду в терминале:

python3 -i stock.py

Опция -i сообщает Python запустить интерактивную сессию после выполнения файла stock.py. Таким образом, мы можем сразу использовать класс Stock и его методы.

  1. Теперь давайте создадим объект акции и используем новый метод display(). Мы создадим объект, представляющий акции Apple, а затем вызовем метод display, чтобы увидеть отформатированную информацию. Вот код:
apple = Stock('AAPL', 200, 154.50)
apple.display()

Когда вы запустите этот код в интерактивной сессии, вы увидите следующий вывод:

Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00

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

  1. Наконец, давайте создадим список акций и выведем их все. Это покажет, как мы можем использовать метод display с несколькими объектами акций. Вот код:
stocks = [
    Stock('GOOG', 100, 490.10),
    Stock('IBM', 50, 91.50),
    Stock('AAPL', 200, 154.50)
]

for stock in stocks:
    stock.display()

Когда вы запустите этот код, вы получите следующий вывод:

Stock: GOOG, Shares: 100, Price: $490.10, Total Cost: $49010.00
Stock: IBM, Shares: 50, Price: $91.50, Total Cost: $4575.00
Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00

Добавив метод display() в наш класс, мы инкапсулировали логику форматирования внутри самого класса. Это делает наш код более организованным и легким в поддержке. Если нам нужно изменить способ отображения информации о акциях, нам нужно изменить только метод display в одном месте, а не вносить изменения по всему коду.

✨ Проверить решение и практиковаться

Резюме

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

Эти концепции объектно - ориентированного программирования являются фундаментальными в Python и служат основой для организации кода в более крупных приложениях. Классы помогают группировать связанные данные и функциональность, делая ваш код более модульным и легким в поддержке. Чтобы дополнительно улучшить свои навыки, попробуйте добавить в класс Stock новые функции, такие как валидация данных, методы для обновления количества акций или цены, а также метод для расчета прибыли или убытка.