Что такое объектно-ориентированное программирование?
Вы уже пользовались объектами много глав подряд — просто ещё не называли их так.
Объект — то, что уже знакомо, но с новым именем
Присмотритесь к коду из предыдущих глав: artist.forward(100),
"Python".upper(), [1,2,3].append(4)
— во всех трёх у нас есть какой-то объект (черепашка, строка, список) и
команда, которую мы у него вызываем через точку. Всё это время вы уже работали с объектами
— этот раздел просто даёт знакомой идее точное имя.
У любого объекта в Python есть две стороны:
| Сторона объекта | Пример у artist (черепашки) |
|---|---|
| Состояние — данные, которые объект хранит прямо сейчас | текущие координаты, цвет, направление |
| Поведение — действия, которые объект умеет выполнять | forward(), right(), color() |
Объектно-ориентированное программирование (ООП) — это способ организовать код вокруг таких объектов: данные и действия, которые к ним относятся, живут вместе, а не разбросаны по отдельным переменным и функциям.
Тип объекта: type()
У каждого объекта в Python есть тип — узнать его можно встроенной функцией
type(), с которой вы уже знакомы:
artist = __import__("turtle").Turtle()
print(type(artist)) # <class 'turtle.Turtle'>
print(type("Python")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>
Слово class в каждом ответе — не случайность. Тип объекта
— это и есть его класс.
Давайте это докажем!
Вы уже пользовались объектами с самой главы 6, даже не называя их так:
import turtle
artist = turtle.Turtle() # artist — объект класса Turtle
artist.forward(100) # forward() — действие (метод) этого объекта
artist.color("red") # у объекта есть и своё состояние — например, цвет
turtle.Turtle — это класс: чертёж, шаблон,
описывающий, какими бывают черепашки и что они умеют. Каждый вызов
turtle.Turtle() создаёт новый, независимый
объект (говорят также «экземпляр класса») по этому чертежу — вспомните
главу 12, где несколько независимых черепашек участвовали в гонке одновременно: у каждой
было своё состояние (позиция, цвет), хотя все они были черепашками одного и того же класса.
turtle.Turtle сам по себе не имеет позиции на экране — позиция появляется только у КАЖДОГО созданного объекта turtle.Turtle() отдельно. Класс — это описание того, какими будут объекты, а не сам объект.