- 6 августа 2025
- 6 минут
- 328
Определение классов в Python и создание экземпляров классов
Статью подготовили специалисты образовательного сервиса Zaochnik.
Python — это язык программирования, полностью основанный на объектной ориентации. Это позволяет разработчикам создавать собственные классы, наследовать от уже существующих или встроенных классов, а также делать экземпляры этих классов.
Создание класса
Определение класса в Python — задача сравнительно простая. Подобно функциям, для этого не нужно вводить отдельное объявление интерфейса.
Процесс начала определения класса в Python начинается с ключевого слова `class`, после которого ставится имя класса (идентификатор). Формально это основные условия, при которых класс не должен наследоваться от другого.
```python
class PapayaWhip:
pass
```
Вышеописанный класс называется `PapayaWhip` и не наследуется от каких-либо других классов. Важно отметить, что каждое слово в имени класса обычно пишется с заглавной буквы, однако это не строгий стандарт, а соглашение.
Каждая строка внутри определения класса имеет отступ, как в функциях, условных конструкциях `if`, циклах `for` и других блоках кода. Первая строка без отступа находится вне области определения класса.
Класс `PapayaWhip` не имеет ни методов, ни атрибутов, но синтаксис требует, чтобы его тело не оставалось пустым. В таких случаях удобно использовать оператор `pass`.
В Python `pass` является зарезервированным словом, которое говорит интерпретатору "продолжай, здесь ничего нет". Этот оператор ничего не выполняет, но служит полезным приемом для создания заглушек для функций или классов.
Оператор `pass` можно рассматривать как аналог пустого набора или фигурных скобок в языках, таких как Java или C++. Хотя большинство классов и наследуются от других, этот конкретный класс — нет. Многие классы также содержат свои методы, но не этот. В Python класс может существовать только с именем. Люди, знакомые с C++, могут посчитать странным, что в классах Python нет явных конструкторов и деструкторов. Тем не менее, класс в Python может включать в себя метод, похожий на конструктор — `__init__()`.
Метод `__init__()`
```python
class Fib:
'''итератор, который генерирует числа
из последовательности Фибоначчи'''
def __init__(self, max):
…
```
Классы, подобно модулям и функциям, могут (и должны) содержать строки документации (docstrings). Метод `__init__()` вызывается сразу после создания экземпляра класса. Неправильно называть его "конструктором" класса. Хотя он выполняет функции, схожие с конструкторами в C++ (это первый метод, который вы определяете в классе), он не является таковым, поскольку объект уже считается созданным к моменту вызова `__init__()`, и вы можете ссылаться на него с использованием корректной ссылки `self`.
Аргументом любого метода класса, включая `__init__()`, всегда будет ссылка на текущий экземпляр. Этот аргумент по традиции называется `self`. Он выполняет аналог функции `this` из C++ или Java, но в Python это не зарезервированное слово. Несмотря на это, называть его иначе не рекомендуется.
В методе `__init__()` `self` ссылается на только что созданный объект, а в других методах — на экземпляр, из которого был вызван метод. Несмотря на то что необходимо указывать `self` при определении метода, делать это при вызове не нужно; Python добавит его автоматически.
Создание экземпляров класса
Чтобы создать новый экземпляр класса в Python, достаточно вызвать сам класс, как будто это функция, передав необходимые параметры для метода `__init__()`. В результате будет создан новый объект.
Каждый экземпляр класса имеет встроенный атрибут `__class__`, который указывает на класс объекта. Программисты, знакомые с Java, могли бы знать о классе `Class`, который предоставляет методы `getName()` и `getSuperclass()` для получения сведений об объекте. В Python информация доступна через соответствующие атрибуты, но концепция остается прежней.
Следует отметить, что строку документации (docstring) класса можно получить так же, как это делается для функций и модулей. Все экземпляры класса используют одну и ту же строку документации.
Чтобы создать новый экземпляр класса в Python, просто вызовите его как функцию, без необходимости использования явных операторов, как `new` в C++ или Java.
Переменные экземпляра
```python
class Fib:
def __init__(self, max):
self.max = max
```
`self.max` — это переменная экземпляра. Она не связана с переменной `max`, переданной в метод `__init__()` в качестве параметра. `self.max` является "глобальной" переменной для данного экземпляра класса, к которой можно ссылаться из других методов.
Переменные экземпляра относятся только к конкретному экземпляру класса. Например, если вы создадите два экземпляра класса `Fib` с различными значениями `max`, каждый из них будет хранить только свое собственное значение.
```python
import fibonacci2
fib1 = fibonacci2.Fib(100)
fib2 = fibonacci2.Fib(200)
>>> fib1.max # 100
>>> fib2.max # 200
```