9. Classes — Python 3.13.2 documentation

В Python 3.13.2 классы – это ключевая концепция, которая позволяет определять и использовать типы данных, объединяющие данные и поведение.
Для создания класса используйте ключевое слово class
, за которым следует имя класса. Внутри класса вы можете определять атрибуты, представляющие данные, относящиеся к объектам класса, и методы, представляющие операции, которые можно выполнять с объектами.
Классы обеспечивают инкапсуляцию, наследование, полиморфизм и другие возможности, которые делают их мощным инструментом для разработки программного обеспечения.
Classes – Python 3.13.2 documentation
Чтобы определить класс, используйте ключевое слово class с именем класса и его определением:
python
class MyClass:
# Определение атрибутов и методов
Атрибуты класса - это переменные, связанные с объектами класса. Они определяются внутри определения класса и доступны всем объектам этого класса.
Методы класса – это функции, определенные внутри класса. Они принимают объекты класса в качестве первого аргумента и имеют доступ к атрибутам и другим методам класса.
Вы создаете объекты класса с помощью оператора new. Объекты имеют свои собственные копии атрибутов класса, которые можно изменять независимо:
python
my_object = MyClass()
Классы являются основой объектно-ориентированного программирования и позволяют создавать гибкие и масштабируемые программы с поддержкой повторного использования кода.
Создание классов
Для создания класса в Python используйте следующий синтаксис:
class НазваниеКласса:
телоКласса
Например:
class Квадрат:
сторона = 0
def __init__(self, сторона):
self.сторона = сторона
def площадь(self):
return self.сторона ** 2
Наследование классов
Наследование позволяет создавать новые классы (дочерние) на основе существующих (родительских) классов. Дочерние классы наследуют атрибуты и методы родительского класса, но могут дополнять и расширять их.
Для создания дочернего класса используйте ключевое слово `class` с именем дочернего класса и укажите родительский класс в скобках:
python
class ДочернийКласс(РодительскийКласс):
pass
В дочернем классе можно добавлять собственные атрибуты и методы или переопределять унаследованные методы родительского класса.
Специальные методы (методы dunder)
В Python существуют специальные методы, называемые методами dunder из-за их двойного подчеркивания (__). Эти методы вызываются автоматически, когда объект класса участвует в определенных операциях. Dunder-методы позволяют определить собственное поведение класса для этих операций.
Например, метод __add__ переопределяет поведение сложения для объектов класса, а метод __eq__ переопределяет равенство. Определяя эти методы, вы можете настроить поведение класса для соответствия конкретным требованиям вашего приложения.
Дескрипторы
Дескрипторы – это специальные классы, которые позволяют перехватывать и изменять доступ к атрибутам других классов. Используя дескрипторы, можно расширить поведение стандартных атрибутов Python или создавать новые атрибуты с пользовательской логикой.
Создание дескриптора требует наследования от класса property.
Классные и статические методы
Классные методы используются для операций, связанных с классом, а не с конкретным экземпляром класса. Они определяются с помощью декоратора @classmethod
и имеют доступ к классовым и статическим переменным.
Статические методы не связаны ни с экземпляром класса, ни с самим классом. Они определяются с помощью декоратора @staticmethod
и не имеют доступа к классовым или статическим переменным.
Типы данных и классы
При определении класса вы можете указать типы данных для атрибутов и методов. Это помогает определить, какие типы данных могут быть переданы методам и какие типы данных будут возвращаться из методов. Типы данных указываются в аннотациях типов, которые начинаются с двоеточия (:).
class Example: def __init__(self, name: str, age: int): self.name = name self.age = age def get_name(self) -> str: return self.name def get_age(self) -> int: return self.age
В приведенном выше примере мы определяем класс `Example` с тремя атрибутами: `self`, `name` и `age`. Атрибуты `name` и `age` аннотированы как тип `str` и `int` соответственно, что означает, что они должны хранить строку и целое число. Методы `get_name` и `get_age` аннотированы как возвращающие тип `str` и `int` соответственно, что означает, что они будут возвращать строку и целое число.
Аннотации типов помогают обеспечить целостность кода, проверяя правильность типов данных, передаваемых методам, и возвращаемых из методов. Они также улучшают читаемость кода, делая его более понятным и простым в обслуживании.
Вопрос-ответ:
Что такое классы в Python?
Классы в Python представляют собой шаблоны для создания объектов. Они определяют структуру и поведение этих объектов, позволяя объединять данные и методы в логические единицы.
Как создать новый класс?
Для создания нового класса в Python используется ключевое слово `class`. Название класса пишется с заглавной буквы по соглашению о наименовании. В теле класса можно определять переменные (атрибуты) и методы (функции), которые будут работать с этими переменными.
Как создать экземпляры класса?
Для создания экземпляра (объекта) класса используется имя класса с круглыми скобками. Например, если класс называется `Car`, для создания экземпляра этого класса можно использовать код `car = Car()`. Экземпляры наследуют переменные и методы, определенные в их классе.
Чем отличается класс от объекта?
Класс — это шаблон для создания объектов, в то время как объект — это конкретный экземпляр класса. Класс определяет общие свойства и поведение, а объекты представляют собой конкретные реализации этих свойств и поведения. В Python каждый объект имеет свой уникальный идентификатор, который отличает его от других объектов того же класса.
Как реализовать наследование в классах?
Наследование позволяет создавать новые классы (подклассы), которые наследуют свойства и методы от существующих классов (суперклассов). Это достигается указанием родительского класса в скобках после заголовка нового класса, например: `class Subclass(Superclass):`. Подклассы могут переопределять методы родительского класса, добавлять новые методы и переменные, создавая более специализированные типы объектов.