Понятие классов, объектов и экземпляров


Понятие объекта в Python

В объектно-ориентированном программировании (ООП) центральным понятием является объект. В языке Python всё является объектом, будь то числа, строки или структуры данных. Итак, что же такое объект?

С точки зрения ООП, объект — это единица, которая:

  1. Хранит данные — это его состояние.
  2. Выполняет действия — это его поведение.

Чтобы проиллюстрировать это, рассмотрим встроенный тип данных list. Создадим объект списка и выполним несколько операций:

my_list = [1, 2, 3]
print(my_list)
my_list.append(5)
print(my_list)
my_list.reverse()
print(my_list)

Вначале создаётся объект списка с данными [1, 2, 3]. Затем, используя метод append(), мы добавляем элемент в конец списка, изменяя его состояние. После этого вызываем метод reverse(), который изменяет порядок элементов. В результате состояние объекта изменяется снова.

Класс

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

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

Рассмотрим пример:

hello = "Hello, World!"
hello.append(5)  # AttributeError: 'str' object has no attribute 'append'

Здесь возникает ошибка, потому что объект строки не имеет метода append. Это ещё раз показывает, что каждый класс имеет свои уникальные методы и атрибуты.


Как связаны объекты и классы

Каждый объект в Python принадлежит определённому классу. Определить класс объекта можно с помощью функции type():

hello = "Hello, World!"
print(type(hello))  # <class 'str'>

my_list = [1, 2, 3]
print(type(my_list))  # <class 'list'>

Вы также можете проверить принадлежность объекта к классу с помощью функции isinstance():

print(isinstance(hello, str))  # True
print(isinstance(my_list, list))  # True

Более того, в Python все объекты, независимо от их типа, являются экземплярами класса object:

print(isinstance(hello, object))  # True
print(isinstance(my_list, object))  # True


Создание собственных классов

Для создания собственного класса в Python используется ключевое слово class. Рассмотрим пример создания простого класса Car:

class Car:
    pass

В соответствии с PEP8, имя класса всегда начинается с заглавной буквы. Если имя состоит из нескольких слов, используется стиль написания CamelCase.

Можно добавить строку документации к классу:

class Car:
    "Класс, описывающий автомобиль"

Теперь мы можем создавать экземпляры этого класса:

a = Car()
b = Car()

print(a, b)


Экземпляры класса

Экземпляр класса — это конкретный объект, созданный на основе класса. Чтобы создать экземпляр, нужно вызвать класс как функцию. Экземпляры можно сохранять в переменные:

a = Car()
b = Car()

print(a, b)
print(type(a))

Экземпляры хранятся в памяти как отдельные объекты с уникальными идентификаторами:

print(id(a), id(b))  # Выводит два разных идентификатора

Вы также можете создать коллекцию экземпляров, например, список:

cars = [Car() for _ in range(5)]
print(cars)


Атрибуты класса

Пока что наш класс Car не содержит никаких данных или поведения. Чтобы добавить данные, мы можем определить атрибуты внутри класса:

class Car:
    model = "BMW"
    engine = 1.6
    

Теперь каждый экземпляр класса Car будет иметь атрибуты model и engine:

a = Car()
print(a.model)  # Выводит: BMW
print(a.engine)  # Выводит: 1.6

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

b = Car()
b.model = "VAZ"
b.color = "white"
print(b.model, b.color)  # Вывод: VAZ white

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

 

Таблица: Основные понятия ООП

ПонятиеОписаниеПример
КлассШаблон или структура, описывающая свойства и поведение объектов.class Car:
ОбъектКонкретный экземпляр класса, созданный на его основе.my_car = Car()
АтрибутПеременные, которые описывают свойства объекта.Car.model = "BMW"
МетодФункции, которые определяют поведение объектов.Car.start_engine()
НаследованиеСпособ, с помощью которого один класс может наследовать свойства и методы другого класса.class ElectricCar(Car):
ИнкапсуляцияПроцесс скрытия деталей реализации объекта, предоставляя только необходимые методы для взаимодействия.self.__private_method()

 

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

Перейти к следующему шагу

Комментарии