HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В программировании мы часто сталкиваемся с необходимостью создать новый класс, который расширяет или изменяет функциональность уже существующих классов. Эту задачу можно выполнить при помощи наследования классов - одного из ключевых механизмов объектно-ориентированного программирования.</p>
1 <p>В программировании мы часто сталкиваемся с необходимостью создать новый класс, который расширяет или изменяет функциональность уже существующих классов. Эту задачу можно выполнить при помощи наследования классов - одного из ключевых механизмов объектно-ориентированного программирования.</p>
2 <p>В этом уроке мы рассмотрим, как работает наследование классов, и как его можно применять для создания новых сложных структур и при этом не дублировать код.</p>
2 <p>В этом уроке мы рассмотрим, как работает наследование классов, и как его можно применять для создания новых сложных структур и при этом не дублировать код.</p>
3 <h2>Наследование классов</h2>
3 <h2>Наследование классов</h2>
4 <p><strong>Наследование классов</strong>- механизм, который позволяет создавать классы (подклассы) на основе других классов - базовые или суперклассы. Подклассы наследуют структуру базовых классов - получают возможность использовать всё, что определено в базовом классе.</p>
4 <p><strong>Наследование классов</strong>- механизм, который позволяет создавать классы (подклассы) на основе других классов - базовые или суперклассы. Подклассы наследуют структуру базовых классов - получают возможность использовать всё, что определено в базовом классе.</p>
5 <p>Наследование в Python - сложная система со множеством нюансов и деталей. Мы будем изучать его в несколько этапов на протяжении всего курса.</p>
5 <p>Наследование в Python - сложная система со множеством нюансов и деталей. Мы будем изучать его в несколько этапов на протяжении всего курса.</p>
6 <p>Рассмотрим наследование на примере структуры HTML. Каждый тег в HTML по своему уникален. Также у них есть общие атрибуты и некоторые другие характеристики. Попробуем отобразить это с помощью иерархии классов:</p>
6 <p>Рассмотрим наследование на примере структуры HTML. Каждый тег в HTML по своему уникален. Также у них есть общие атрибуты и некоторые другие характеристики. Попробуем отобразить это с помощью иерархии классов:</p>
7 <p>В этом коде мы определили базовый класс HTMLElement, который представляет общую структуру HTML-элемента. Методы set_attribute и get_attribute устанавливают и получают атрибуты HTML-элемента, а set_text_content и get_text_content работают с текстовым содержимым элемента.</p>
7 <p>В этом коде мы определили базовый класс HTMLElement, который представляет общую структуру HTML-элемента. Методы set_attribute и get_attribute устанавливают и получают атрибуты HTML-элемента, а set_text_content и get_text_content работают с текстовым содержимым элемента.</p>
8 <p>Теперь создадим подкласс HTMLAnchorElement, представляющий тег "a" в HTML, наследуя его от класса HTMLElement:</p>
8 <p>Теперь создадим подкласс HTMLAnchorElement, представляющий тег "a" в HTML, наследуя его от класса HTMLElement:</p>
9 <p>Здесь мы определили класс HTMLAnchorElement, который наследует все атрибуты и методы класса HTMLElement. Мы также добавили метод __str__, который возвращает строковое представление HTML-элемента.</p>
9 <p>Здесь мы определили класс HTMLAnchorElement, который наследует все атрибуты и методы класса HTMLElement. Мы также добавили метод __str__, который возвращает строковое представление HTML-элемента.</p>
10 <p>Наследование записывается так: A(B). Эта запись означает, что класс<em>A</em>наследует класс<em>B</em>.</p>
10 <p>Наследование записывается так: A(B). Эта запись означает, что класс<em>A</em>наследует класс<em>B</em>.</p>
11 <p>Теперь посмотрим, как работает наследование:</p>
11 <p>Теперь посмотрим, как работает наследование:</p>
12 - <p>Внутри HTMLAnchorElement нет определения конструктора, но благодаря наследованию, этот класс имеет доступ ко всем публичным методам и свойствам суперкласса. Python вызывает их автоматически при обращении к ним. В свою очередь, внутри __str__() вызываются методы, которых нет в текущих классах, поэтому они также берутся из родительского класса.</p>
12 + <p>Внутри HTMLAnchorElement нет определения конструктора, но благодаря наследованию, этот класс имеет доступ ко всем публичным методам и свойствам суперкласса. Python вызывает их автоматически при обращении к ним. В свою очередь, внутри __str__() вызываются методы, которых нет в текущих классах, поэтому они такж берутся из родительского класса.</p>
13 <p>Создание подкласса на основе одного класса является довольно простым процессом. Но что, если возникает необходимость наследовать свойства сразу от нескольких классов? В Python для этих целей существует механизм множественного наследования, который позволяет создавать подкласс на основе нескольких классов.</p>
13 <p>Создание подкласса на основе одного класса является довольно простым процессом. Но что, если возникает необходимость наследовать свойства сразу от нескольких классов? В Python для этих целей существует механизм множественного наследования, который позволяет создавать подкласс на основе нескольких классов.</p>
14 <h2>Цепочка наследования</h2>
14 <h2>Цепочка наследования</h2>
15 <p>В отличие от некоторых других языков программирования, наследование классов в Python - одиночное и множественное. То есть в Python можно наследоваться от одного или нескольких классов сразу.</p>
15 <p>В отличие от некоторых других языков программирования, наследование классов в Python - одиночное и множественное. То есть в Python можно наследоваться от одного или нескольких классов сразу.</p>
16 <p>Это свойство языка добавляет гибкости, но также и сложности, особенно, когда у базовых классов есть методы с одинаковыми именами. При этом цепочка наследования может быть сколь угодно глубокой:</p>
16 <p>Это свойство языка добавляет гибкости, но также и сложности, особенно, когда у базовых классов есть методы с одинаковыми именами. При этом цепочка наследования может быть сколь угодно глубокой:</p>
17 <p>Это пример четырех классов, каждый из которых наследуется от предыдущего. Это показывает, что наследование в Python может быть "цепочкой", где каждый новый класс наследует свойства и методы предыдущего.</p>
17 <p>Это пример четырех классов, каждый из которых наследуется от предыдущего. Это показывает, что наследование в Python может быть "цепочкой", где каждый новый класс наследует свойства и методы предыдущего.</p>
18 <p>Когда у нас много классов и сложная структура наследования, может возникнуть вопрос, как определить, к какому классу принадлежит конкретный объект. Для этих целей предоставляются специальные операторы и функции для проверки типов.</p>
18 <p>Когда у нас много классов и сложная структура наследования, может возникнуть вопрос, как определить, к какому классу принадлежит конкретный объект. Для этих целей предоставляются специальные операторы и функции для проверки типов.</p>
19 <h2>Оператор проверки типа</h2>
19 <h2>Оператор проверки типа</h2>
20 <p>В Python можно использовать оператор isinstance() для проверки принадлежности объекта к определенному классу, учитывая при этом наследование:</p>
20 <p>В Python можно использовать оператор isinstance() для проверки принадлежности объекта к определенному классу, учитывая при этом наследование:</p>
21 <p>Здесь мы создали объект anchor класса HTMLAnchorElement и проверили, является ли он экземпляром класса HTMLElement. Поскольку HTMLAnchorElement наследуется от HTMLElement, функция isinstance() возвращает True.</p>
21 <p>Здесь мы создали объект anchor класса HTMLAnchorElement и проверили, является ли он экземпляром класса HTMLElement. Поскольку HTMLAnchorElement наследуется от HTMLElement, функция isinstance() возвращает True.</p>
22 <p>Для проверки точного класса объекта, мы можем использовать функцию type():</p>
22 <p>Для проверки точного класса объекта, мы можем использовать функцию type():</p>
23 <p>Здесь мы используем функцию type(), чтобы проверить, что класс объекта anchor точно является HTMLAnchorElement.</p>
23 <p>Здесь мы используем функцию type(), чтобы проверить, что класс объекта anchor точно является HTMLAnchorElement.</p>
24 <p>Подобные проверки могут ограничивать возможность использования полиморфизма. Иногда без них не обойтись, но в большинстве случаев лучше использовать интерфейс объекта.</p>
24 <p>Подобные проверки могут ограничивать возможность использования полиморфизма. Иногда без них не обойтись, но в большинстве случаев лучше использовать интерфейс объекта.</p>
25 <h2>Выводы</h2>
25 <h2>Выводы</h2>
26 <p>Python предоставляет возможность использовать наследование для создания сложных структур данных и гибкого кода. Однако при множественном наследовании и проверках типов могут возникнуть трудности. Вместо этого, рекомендуется использовать интерфейс объекта, чтобы реализовать принцип полиморфизма и избежать этих проблем.</p>
26 <p>Python предоставляет возможность использовать наследование для создания сложных структур данных и гибкого кода. Однако при множественном наследовании и проверках типов могут возникнуть трудности. Вместо этого, рекомендуется использовать интерфейс объекта, чтобы реализовать принцип полиморфизма и избежать этих проблем.</p>