HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В Python объекты - это значения, создаваемые на основе шаблона -<em>класса</em>. Но для сначала стоит отметить, что каждый класс является отдельным<em>пространством имен</em>.</p>
1 <p>В Python объекты - это значения, создаваемые на основе шаблона -<em>класса</em>. Но для сначала стоит отметить, что каждый класс является отдельным<em>пространством имен</em>.</p>
2 <p><em>Пространство имен (namespace)</em>, это некая совокупность этих имен, в пределах которой каждое имя уникально. При этом разные пространства имен могут содержать одно и то же имя, но в разных пространствах это имя может быть связано с разными сущностями.</p>
2 <p><em>Пространство имен (namespace)</em>, это некая совокупность этих имен, в пределах которой каждое имя уникально. При этом разные пространства имен могут содержать одно и то же имя, но в разных пространствах это имя может быть связано с разными сущностями.</p>
3 <p>Уже знакомым вам примером пространств имен является модуль. В пределах модуля вы не сможете сделать два объявления с одинаковыми именами: то, что будет сделано позже, просто поменяет значение имени. Зато разные модули могут содержать элементы с одним и тем же именем.</p>
3 <p>Уже знакомым вам примером пространств имен является модуль. В пределах модуля вы не сможете сделать два объявления с одинаковыми именами: то, что будет сделано позже, просто поменяет значение имени. Зато разные модули могут содержать элементы с одним и тем же именем.</p>
4 <p>Каждый класс также является отдельным пространством имен - имен<em>атрибутов класса</em>. Атрибут, это то же самое определение. В момент определения класса определяются и его атрибуты.</p>
4 <p>Каждый класс также является отдельным пространством имен - имен<em>атрибутов класса</em>. Атрибут, это то же самое определение. В момент определения класса определяются и его атрибуты.</p>
5 <blockquote><p>Кстати, элементы модуля также принято называть атрибутами, ведь модули, это тоже объекты, и у них даже есть класс.</p>
5 <blockquote><p>Кстати, элементы модуля также принято называть атрибутами, ведь модули, это тоже объекты, и у них даже есть класс.</p>
6 </blockquote><h2>Объявление класса</h2>
6 </blockquote><h2>Объявление класса</h2>
7 <p>Класс может быть объявлен в любом месте кода. Ведь объявление класса, это всего лишь создание специального объекта. Да, классы - тоже объекты. Однако чаще всего классы объявляются на верхнем уровне модулей и таким образом оказываются созданы при первом импорте модуля.</p>
7 <p>Класс может быть объявлен в любом месте кода. Ведь объявление класса, это всего лишь создание специального объекта. Да, классы - тоже объекты. Однако чаще всего классы объявляются на верхнем уровне модулей и таким образом оказываются созданы при первом импорте модуля.</p>
8 <p>Объявление минимального класса выглядит так:</p>
8 <p>Объявление минимального класса выглядит так:</p>
9 <p>Как мы видим, конструкция объявления класса содержит блок. В данном случае ключевое слово pass позволяет описать пустой блок (это ключевое слово можно использовать в любом месте, где требуется блок - в функциях, циклах, условиях.).</p>
9 <p>Как мы видим, конструкция объявления класса содержит блок. В данном случае ключевое слово pass позволяет описать пустой блок (это ключевое слово можно использовать в любом месте, где требуется блок - в функциях, циклах, условиях.).</p>
10 <p>После выполнения этого кода в модуле появляется новый атрибут "C", где "C" это и имя атрибута модуля, и имя объявленного класса. С этого момента объект класса можно использовать как любой другой - передавать в функции, сохранять в переменные, помещать в списки и словари.</p>
10 <p>После выполнения этого кода в модуле появляется новый атрибут "C", где "C" это и имя атрибута модуля, и имя объявленного класса. С этого момента объект класса можно использовать как любой другой - передавать в функции, сохранять в переменные, помещать в списки и словари.</p>
11 <p>Класс C сейчас не содержит ни одного атрибута. Но это уже полноценный класс. Теперь давайте поместим в класс какие-то данные, а заодно посмотрим, как выглядит созданный класс снаружи:</p>
11 <p>Класс C сейчас не содержит ни одного атрибута. Но это уже полноценный класс. Теперь давайте поместим в класс какие-то данные, а заодно посмотрим, как выглядит созданный класс снаружи:</p>
12 <p>Эта версия класса C уже содержит два атрибута - a и b. Эти атрибуты похожи на переменные в модулях, но их<em>видимость</em>ограничена классом C.</p>
12 <p>Эта версия класса C уже содержит два атрибута - a и b. Эти атрибуты похожи на переменные в модулях, но их<em>видимость</em>ограничена классом C.</p>
13 <blockquote><p>Обратите внимание на то, как отображается класс C при выводе в REPL: &lt;class '__main__.C'&gt;. Пространство имен, которое вы видите, когда запускаете REPL, так и называется - "__main__", поэтому полное имя класса, который был объявлен в этом пространстве имен, содержит именно это имя модуля. Классы, созданные в именованных модулях, будут содержать полные имена модулей в тексте их (классов) полного имени.</p>
13 <blockquote><p>Обратите внимание на то, как отображается класс C при выводе в REPL: &lt;class '__main__.C'&gt;. Пространство имен, которое вы видите, когда запускаете REPL, так и называется - "__main__", поэтому полное имя класса, который был объявлен в этом пространстве имен, содержит именно это имя модуля. Классы, созданные в именованных модулях, будут содержать полные имена модулей в тексте их (классов) полного имени.</p>
14 </blockquote><h2>Именование классов</h2>
14 </blockquote><h2>Именование классов</h2>
15 <p>В Python классы принято называть в стиле<a>CamelCase</a>. Это позволяет визуально отделить классы от переменных, функций, констант. Но будьте готовы к тому, что иногда имя у класса может выглядеть, как имя функции. Далеко за примером ходить не нужно:</p>
15 <p>В Python классы принято называть в стиле<a>CamelCase</a>. Это позволяет визуально отделить классы от переменных, функций, констант. Но будьте готовы к тому, что иногда имя у класса может выглядеть, как имя функции. Далеко за примером ходить не нужно:</p>
16 <p>Оказывается, что str, это никакая не функция, преобразующая все в строку. Это самый что ни на есть настоящий класс, хоть и прикидывается функцией. К счастью, вне стандартной библиотеки такими "приемчиками" не злоупотребляют, и большинство классов таки можно узнать по имени.</p>
16 <p>Оказывается, что str, это никакая не функция, преобразующая все в строку. Это самый что ни на есть настоящий класс, хоть и прикидывается функцией. К счастью, вне стандартной библиотеки такими "приемчиками" не злоупотребляют, и большинство классов таки можно узнать по имени.</p>