Как сделать класс в питоне

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

В языке программирования Python классы характеризуются следующими особенностями:

  • в отдельности классы представляют собой определенные пространства имен;
  • классы поддерживают создание набора объектов;
  • пространства имен классов могут быть унаследованы;
  • в классах можно реализовывать перегрузку функций (методов);
  • в классах можно реализовывать перегрузку операторов.

Как известно, в языке Python любой элемент (число, строка, список и т.д) представлен объектом. Это касается и объектно-ориентированной модели Python, в которой различают два типа объектов:

  • объекты классов. Эти объекты реализуют поведение по умолчанию. На основе объектов классов создаются объекты экземпляров. Объекты классов представляют собой фабрики по созданию объектов экземпляров;
  • объекты экземпляров. Это объекты, которые создаются на основе объектов классов. Объекты экземпляров имеют собственное (самостоятельное) пространство имен а также наследуют имена (имеют доступ) классов, из которых они были созданы.
2. Создание объекта класса. Общая форма

Объект класса создается с помощью инструкции, которая содержит ключевое слово class . В простейшем случае общая форма создания объекта класса имеет вид:

  • ClassName – имя создаваемого класса. Это есть имя объекта класса. В этом классе можно реализовывать разные элементы класса, например внутренние данные, функции (методы), операторы и т.д.

На основании имени ClassName может быть создан реальный объект экземпляра.

3. Создание объекта экземпляра. Общая форма

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

Общая форма создания объекта экземпляра следующая:

  • Obj – имя объекта экземпляра, который создается объектом класса с именем ClassName . Созданный объект экземпляра Obj имеет свое собственное пространство имен;
  • ClassName – имя объекта класса, который создается с помощью инструкции class.
4. Особенности объектов классов

В языке Python для объектов классов можно выделить следующие особенности:

5. Особенности объектов экземпляров

Объект экземпляра есть результатом вызова объекта класса. Для объектов экземпляров можно выделить следующие характерные особенности:

  • объект экземпляра создается на основании вызова объекта класса как функции, которая содержит круглые скобки ( ) . Из одного объекта класса может быть создано любое количество объектов экземпляра;
  • объект экземпляра есть конкретным элементом данных в программе;
  • при создании каждый объект экземпляра наследует атрибуты класса, на основе которого он создается;
  • объект экземпляра имеет свое собственное пространство имен;
  • присваивание значений атрибутам происходит через первый аргумент, которым может быть, например, ссылка с именем self (смотрите примеры ниже). После присваивания создается соответствующий атрибут в каждом отдельном объекте экземпляра. В этом случае методы класса получают первым аргументом ссылку self (в соответствии с договоренностью), которая соответствует объекту экземпляра. С помощью этой ссылки ( self ) можно создавать или изменять данные экземпляра объекта. Данные экземпляра класса с помощью self создать (изменить) нельзя.
6. Что такое атрибут класса? Пример класса Circle

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

Например. Пусть задан класс с именем Circle , реализующий окружность на координатной плоскости.

В вышеприведенном классе Circle реализованы следующие атрибуты:

  • метод Set() , устанавливающий значение атрибутов x , y , radius ;
  • метод Get() , возвращающий данные об окружности в виде списка;
  • метод Print() – выводит информацию об окружности;
  • метод Area() – выводит площадь окружности радиуса radius ;
  • внутренние поля данных x , y – координаты центра окружности;
  • поле данных radius – радиус окружности.

В методах первым аргументом используется параметр с именем cr , который означает текущий экземпляр. Через это имя cr осуществляется доступ к данным: cr.x , cr.y , cr.radius . Имя cr может быть заменено на другое имя, например self .

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

В примере объявляется класс с именем Value . В классе создается ячейка с данными, которая содержит некоторое значение. Имя данных в классе – value . Чтобы доступиться к данным используется параметр self , который представляет собой текущий экземпляр класса. Допускается использование другого имени вместо имени self (например, self2 ).

Результат выполнения программы

На рисунке 1 изображены объекты, которые создаются в вышеприведенном примере.

Python. Объект класса и объект экземпляра

Рисунок 1. Структура программы: объекты экземпляра и объект класса

8. Пример реализации класса, который сохраняет набор данных. Класс SquareEquation — решение квадратного уравнения

В примере создается экземпляр класса, который предназначен для решения квадратного уравнения. В классе с помощью имени экземпляра self создаются три члена данных с именами a , b , c .

Также в методах класса используются дополнительные внутренние переменные с именами d , x1 , x2 . Это только временные локальные переменные. Они не являются данными экземпляра класса и не влияют на состояние конкретного экземпляра объекта. Внутреннее состояние любого экземпляра объекта определяется данными a , b , c .

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

Класс является шаблоном или формальным описанием объекта, а объект представляет экземпляр этого класса, его реальное воплощение. Можно провести следующую аналогию: у всех у нас есть некоторое представление о человеке - наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного мозга и т.д. Есть некоторый шаблон - этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса.

С точки зрения кода класс объединяет набор функций и переменных, которые выполняют определенную задачу. Функции класса еще называют методами. Они определяют поведение класса. А переменные класса называют атрибутами - они хранят состояние класса

Класс определяется с помощью ключевого слова class :

Для создания объекта класса используется следующий синтаксис:

Например, определим простейший класс Person, который будет представлять человека:

Класс Person определяет атрибут name, который хранит имя человека, и метод display_info, с помощью которого выводится информация о человеке.

При определении методов любого класса следует учитывать, что все они должны принимать в качестве первого параметра ссылку на текущий объект, который согласно условностям называется self (в ряде языков программирования есть своего рода аналог - ключевое слово this). Через эту ссылку внутри класса мы можем обратиться к методам или атрибутам этого же класса. В частности, через выражение self.name можно получить имя пользователя.

После определения класс Person создаем пару его объектов - person1 и person2. Используя имя объекта, мы можем обратиться к его методам и атрибутам. В данном случае у каждого из объектов вызываем метод display_info() , который выводит строку на консоль, и у второго объекта также изменяем атрибут name. При этом при вызове метода display_info не надо передавать значение для параметра self.

Конструкторы

Для создания объекта класса используется конструктор. Так, выше когда мы создавали объекты класса Person, мы использовали конструктор по умолчанию, который неявно имеют все классы:

Однако мы можем явным образом определить в классах конструктор с помощью специального метода, который называется __init__() . К примеру, изменим класс Person, добавив в него конструктор:

В качестве первого параметра конструктор также принимает ссылку на текущий объект - self. Нередко в конструкторах устанавливаются атрибуты класса. Так, в данном случае в качестве второго параметра в конструктор передается имя пользователя, которое устанавливается для атрибута self.name . Причем для атрибута необязательно определять в классе переменную name, как это было в предыдущей версии класса Person. Установка значения self.name = name уже неявно создает атрибут name.

В итоге мы получим следующий консольный вывод:

Деструктор

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

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

Кроме того, мы можем определить определить в классе деструктор, реализовав встроенную функцию __del__ , который будет вызываться либо в результате вызова оператора del, либо при автоматическом удалении объекта. Например:

Определение классов в модулях и подключение

Как правило, классы размещаются в отдельных модулях и затем уже импортируются в основой скрипт программы. Пусть у нас будет в проекте два файла: файл main.py (основной скрипт программы) и classes.py (скрипт с определением классов).

Определение классов Python в модулях и подключение

В файле classes.py определим два класса:

В дополнение к классу Person здесь также определен класс Auto, который представляет машину и который имеет метод move и атрибут name. Подключим эти классы и используем их в скрипте main.py :

Подключение классов происходит точно также, как и функций из модуля. Мы можем подключить весь модуль выражением:

От автора: что такое класс? Класс в Python — это логическая группа данных и функций. Он дает возможность создавать структуры данных, которые содержат произвольный контент и, следовательно, легко доступны.

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

В этом руководстве мы рассмотрим:

Как определить классы Python

Как работает наследование


Получите курс и узнайте, как создать программу для перевода текстов на Python

Как определить классы Python

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

Шаг 2) Внутри классов вы можете определить функции или методы, которые являются частью этого класса

Шаг 3) Все в классе указывается с отступом, так же, как код в функции, цикле, операторе if и т. д. Все, что не имеет отступа, не находится в классе:


Self — это имя, предпочитаемое соглашением Pythons для обозначения первого параметра методов экземпляра в Python. Это часть синтаксиса Python для доступа к членам объектов

Шаг 4) Создаем объект класса

Шаг 5) Чтобы вызвать метод в классе

Обратите внимание, что когда мы вызываем method1 или method2, нам не нужно указывать ключевое слово self. Это автоматически обрабатывается средой исполнения Python.

Вам нужно заботиться о других аргументах

Шаг 6) Вот полный код

Как работает наследование

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



Получите курс и узнайте, как создать программу для перевода текстов на Python

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

Шаг 1) Запустите следующий код

Шаг 2) Раскомментируйте строки № 8 и 10. Запустите код.

Шаг 3) Раскомментируйте строку № 9. Запустите код.

Вы можете видеть, что метод родительского класса использует синтаксис

В нашем случае мы вызываем myClass.method1(self), и, как ожидается, выводится Guru99

Шаг 4) Раскомментируйте строку № 19. Запустите код.

Конструкторы Python

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

Вывод будет: Welcome to Guru99, Alex

Пример Python 2

Приведенные выше коды являются примерами Python 3. Если вы хотите запустить Python 2, рассмотрите следующий код.

Заключение

Механизм наследования классов

Производный класс, который переопределяет любой метод своего базового класса

Метод может вызывать метод базового класса с тем же именем

Внутри классов вы можете определить функции или методы, которые являются частью класса

Все в классе имеет отступ, как и код в функции, цикле, операторе if и т. д.

Аргумент self в Python ссылается на сам объект. Self — это имя, предпочитаемое соглашением Pythons для обозначения первого параметра методов экземпляра в Python.

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

Редакция: Команда webformyself.


Получите курс и узнайте, как создать программу для перевода текстов на Python

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

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

Разница между классом и объектом в python заключается в том, что объект является экземпляром класса.

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

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

Мы можем думать о классе, как об эскизе (прототипе) дома. Он содержит все подробности о этажах, дверях, окнах и т.д. На основе этих описаний мы строим дом. Дом ‒ это объект.

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

Определение класса

Как и определения функций в Python начинаются с ключевого слова def, определения классов начинаются с ключевого слова class.

Первая строка внутри класса называется docstring и содержит краткое описание класса. Хотя это не обязательно, это настоятельно рекомендуется.

Вот простое определение класса:

Класс создает новое локальное пространство имен, в котором определены все его атрибуты. Атрибуты могут быть данными или функциями.

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

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

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

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

Его также можно использовать для создания новых экземпляров объекта (создания экземпляров) этого класса. Процедура создания объекта аналогична вызову функции.

Это создаст новый экземпляр объекта с именем harry . Мы можем получить доступ к атрибутам объектов, используя префикс имени объекта.

Атрибуты могут быть данными или методом. Методы объекта ‒ это соответствующие функции этого класса.

Это означает, что поскольку Person.greet является объектом функции (атрибутом класса), Person.greet будет объектом метода.

Вы могли заметить параметр self в определении функции внутри класса, но мы вызвали этот метод просто как harry.greet() без каких-либо аргументов. Это все еще работало.

Это потому, что всякий раз, когда объект вызывает свой метод, сам объект передается в качестве первого аргумента. Итак, harry.greet() переводится как Person.greet (harry).

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

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

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

Конструкторы в Python

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

Особый интерес представляет функция __init __(). Эта специальная функция вызывается всякий раз, когда создается новый объект этого класса.

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

В приведенном выше примере мы определили новый класс для представления комплексных чисел. В нем есть две функции: __init __() для инициализации переменных (по умолчанию ‒ ноль) и get_data() для правильного отображения числа.

Удаление атрибутов и объектов

Любой атрибут объекта можно удалить в любое время с помощью оператора del. Попробуйте выполнить следующее в оболочке Python, чтобы увидеть результат.

Мы даже можем удалить сам объект, используя оператор del.

На самом деле все намного сложнее. Когда мы делаем c1 = ComplexNumber (1,3), в памяти создается новый объект-экземпляр, и имя c1 связывается с ним.

В команде del c1 эта привязка удаляется, а имя c1 удаляется из соответствующего пространства имен. Однако объект продолжает существовать в памяти, и если к нему не привязано другое имя, он позже автоматически уничтожается.

Это автоматическое уничтожение объектов, на которые нет ссылок, в Python также называется сборкой мусора.

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