Перейти к содержанию

232 уроков, 16 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 1 из 20 Средний 30 мин 100 XP

Классы в Python: первый объект

Класс — чертёж, объект — экземпляр по этому чертежу. Создаём первый класс, вызываем методы и убеждаемся: в Python объектом является всё, включая функции.

Редакция Питоники

До сих пор вы пользовались чужими классами: каждая строка в Python — объект класса str, каждый список — list, а методы вроде upper() и append() принадлежат именно классам. Теперь вы переходите на другую сторону баррикад: начнёте проектировать собственные классы — способ завести в программе собственные сущности вроде дома, банковского счёта или игрока. После следующего урока объекты научатся рождаться с готовым состоянием, а пока — класс, объект и первая проверка того, из чего состоит Python.

Класс и объект: чертёж и экземпляр

первый класс и два объекта
class Robot:
    def say_hello(self):
        print("Бип-бип!")

first = Robot()
second = Robot()

first.say_hello()
print(first is second)
Вывод
Бип-бип!
False
атрибуты: данные объекта
class Robot:
    def say_hello(self):
        print(f"Привет, я {self.name}!")

first = Robot()
first.name = "Роби"
second = Robot()
second.name = "Валли"

first.say_hello()
second.say_hello()
print(second.name)
Вывод
Привет, я Роби!
Привет, я Валли!
Валли

Класс — чертёж: он описывает, какие атрибуты (данные) и методы (поведение) будут у будущих объектов, но сам по себе ничего не хранит. Объект, он же экземпляр, — живой представитель, построенный по чертежу вызовом класса. Из одного класса рождается сколько угодно независимых объектов, и у каждого своё состояние. Вызов Robot() строит новый объект; дважды — значит два объекта, и first is second честно отвечает False: это разные жители класса. Запись first.name = "Роби" прикрепляет к объекту атрибут — данные, которые живут при конкретном роботе; у second имя своё, поэтому роботы здороваются по-разному. Синтаксис одинаков для чтения и записи: obj.имя, — а класс остаётся единственным описанием поведения.

Всё в Python — объект

Классы — не особый мир внутри языка, а его обычная ткань. Строка, число, список, функция — всё это объекты своих классов, и у любого можно спросить тип функцией type(). Дойдёт до забавного: сам класс — тоже объект, экземпляр класса type. Именно поэтому Python ведёт себя единообразно: у любого значения есть тип, методы и место в памяти.

спрашиваем тип у разных значений
class Cat:
    pass

print(type("abc"))
print(type(42))
print(type([1, 2]))
print(type(Cat))

murzik = Cat()
print(type(murzik))
Вывод
<class 'str'>
<class 'int'>
<class 'list'>
<class 'type'>
<class '__main__.Cat'>
ВыражениеРезультатЧто это значит
type("abc")<class 'str'>строка — объект встроенного класса str
type(42)<class 'int'>целое число — объект класса int
type(murzik)<class '__main__.Cat'>экземпляр — объект вашего класса
type(Cat)<class 'type'>сам класс — тоже объект, экземпляр type

Первый класс создан, объекты размножены, и вы знаете, что type("abc") — это <class 'str'>. Дальше по курсу: __init__ и self — как объект получает состояние при рождении; атрибуты класса и экземпляра — общее против индивидуального. А когда объекты начнут печататься уродливыми адресами, их принарядят магические методы.

Что выведет код?

Сначала предскажи ответ в голове — это главный навык программиста.

class House:
    def live(self):
        print("живём")

h1 = House()
h2 = House()
print(h1 is h2)
class Book:
    def describe(self):
        print(f"Книга: {self.title}")

book = Book()
book.title = "Алиса"
book.describe()
class Game:
    pass

print(type(Game))
Проверь себя
0 / 6

1. Что такое класс в Python?

2. Как создать экземпляр класса House?

3. Что выведет type("питон")?

4. first = Robot() и second = Robot(). Что вернёт first is second?

5. Что напечатает print(cat), если у класса Cat нет __repr__ и __str__?

6. Почему upper() можно вызвать у строки, но не у числа?

Карточки терминов
Запомнено: 0 / 6
Практика

Создайте класс Book с методом describe(self), который печатает строку вида «Книга: Название, страниц: N». Создайте два объекта: book_one с атрибутами title = "Муми-тролли" и pages = 200, book_two с title = "Винни-Пух" и pages = 150. Вызовите describe у обеих книг.

practice.py
Вопросы и ответы по уроку

Что такое класс в Python простыми словами?

Это чертёж: класс перечисляет, какие данные и методы будут у объектов. Сам класс данных не хранит — хранят созданные по нему экземпляры. Вызов класса со скобками, House(), строит новый объект.

Урок 2: __init__ и self

Чем класс отличается от объекта?

Класс один, объектов по нему — сколько угодно. Класс House описывает, что у дома есть адрес и этажи; объекты my_house и dacha — конкретные дома с разными значениями атрибутов. Класс — это тип, объект — экземпляр типа.

Почему в Python всё является объектом?

Потому что даже базовые значения — экземпляры классов: строка — str, число — int, функция — function. Проверка type(42) вернёт <class 'int'>. Единообразие даёт каждому значению тип и методы, поэтому код вроде "текст".upper() работает без деления типов на простые и сложные.

Что означает <class '__main__.Cat'> в выводе type()?

__main__ — имя модуля, в котором класс объявлен (при запуске файла напрямую модуль называется __main__), а Cat — имя класса. Для экземпляра type(murzik) покажет именно его класс; адреса памяти в этом выводе нет — он появляется только при печати самого объекта без __repr__.

Понравился урок? Сошлитесь на него

«Из одного класса рождается сколько угодно независимых объектов, и у каждого своё состояние.»

Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.