Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Классы

Классы, пространства имён, атрибуты.

На прошлом уроке уже прозвучало слово "класс". Я сравнил класс с шаблоном, по которому создаются объекты этого класса, называемые экземплярами (класса). Далее мы разберём объявление классов с точки зрения синтаксиса, но сначала стоит отметить, что каждый класс является отдельным пространством имён.

Пространство имён (namespace), это некая совокупность этих имён, в пределах которой каждое имя уникально. При этом разные пространства имён могут содержать одно и то же имя, но в разных пространствах имён это имя может быть связано с разными сущностями.

Уже знакомым вам примером пространств имён является модуль. В пределах модуля вы не сможете сделать два объявления с одинаковыми именами: то, что будет сделано позже, просто поменяет значение имени. Зато разные модули могут содержать элементы с одним и тем же именем.

Каждый класс также является отдельным пространством имён — имён атрибутов класса. Атрибут, это то же самое определение. В момент определения класса определяются и его атрибуты.

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

Объявление класса.

Класс может быть объявлен в любом месте кода. Ведь объявление класса, это всего лишь создание специального объекта. Да, классы — тоже объекты! Однако чаще всего классы объявляются на верхнем уровне модулей и таким образом оказываются созданы при первом импорте модуля (я расскажу об этом позже).

Объявление минимального класса выглядит так:

class C:
    pass

Как вы видите, конструкция объявления класса содержит блок. В данном случае ключевое слово pass позволяет описать пустой блок (это ключевое слово можно использовать в любом месте, где требуется блок — в функциях, циклах, условиях!).

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

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

>>> class C:
...     a = 100
...     b = "Potato"
...
>>> C
<class '__main__.C'>
>>> C.a
100
>>> C.b
"Potato"

Эта версия класса C уже содержит два атрибута — a и b. Эти атрибуты похожи на переменные в модулях, но их видимость ограничена классом C.

Обратите внимание на то, как отображается класс C при выводе в REPL: <class '__main__.C'>. Пространство имён, которое вы видите, когда запускаете REPL, так и называется — "main", поэтому полное имя класса, который был объявлен в этом пространстве имён, содержит именно это имя модуля. Классы, созданные в именованных модулях, будут содержать полные имена модулей в тексте их (классов) полного имени.

Именование классов.

В Python классы принято называть в стиле CamelCase. Это позволяет визуально отделить классы от переменных, функций, констант. Но будьте готовы к тому, что иногда имя у класса может выглядеть, как имя функции. Далеко за примером ходить не нужно:

>>> dict
<class 'dict'>
>>> list
<class 'list'>
>>> tuple
<class 'tuple'>
>>> str
<class 'str'>
>>> int
<class 'int'>

Оказывается, что str, это никакая не функция, преобразующая всё в строку! Это самый что ни на есть настоящий класс, хоть и прикидывается функцией! К счастью, вне стандартной библиотеки такими "приёмчиками" не злоупотребляют, и большинство классов таки можно узнать по имени :)


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Для полного доступа к курсу, нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Изображение Тото

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