Реализация на языке Python: различия между версиями
Материал из LERNADO: Информатика и техники
Новая страница: «<iframe key="lernbase" level="video" path="videos/embed/6aSyqLxBECi3Q8181jEJGb?muted=1&title=0" width="800" height="600" allowfullscreen="true" />» |
|||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
<iframe key="lernbase" level="video" path="videos/embed/6aSyqLxBECi3Q8181jEJGb?muted=1&title=0" width="800" height="600" allowfullscreen="true" /> | <iframe key="lernbase" level="video" path="videos/embed/6aSyqLxBECi3Q8181jEJGb?muted=1&title=0" width="800" height="600" allowfullscreen="true" /> | ||
== Краткое содержание лекции == | |||
=== Введение === | |||
* Цель: Реализация класса в Python, аналогичного классу в C++, реализованному в [[Реализация на языке C++|предыдущей лекции]]. | |||
* Основные элементы реализации: | |||
** Данные экземпляра. | |||
** Методы экземпляра. | |||
** Свойства экземпляра. | |||
* Жизненный цикл объекта: создание, инициализация, деинициализация, удаление. | |||
=== Основы реализации класса в Python === | |||
* Синтаксис: <code>class MyClass(object):</code>. | |||
* Особенность Python -- <code>object</code> в скобках. | |||
* В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего. | |||
* В Python 3 все классы имеют некоторые общие атрибуты, за которые и отвечает <code>object</code>. | |||
* Переменные в Python создаются динамически. | |||
* В функциях, реализующих методы: | |||
** Первый параметр -- <code>self</code> -- ссылка на экземпляр, с которым ведется работа. | |||
** Динамическая типизация: типы параметров не указываются. | |||
=== Жизненный цикл объекта === | |||
* Создание объекта: | |||
** Функция создания объекта <code>__new__</code> в Python реализуется при необходимости, что на практике делается редко. | |||
** <code>__new__</code> принимает ссылку на класс, а не на экземпляр. | |||
* Инициализация (Конструктор): | |||
** Определяется с помощью <code>__init__(self, ...)</code>. | |||
** <code>self</code> – ссылка на экземпляр. | |||
** Устанавливает начальные значения для переменных экземпляра. | |||
* Деинициализация (Деструктор): | |||
** Деструктор реализуется функцией <code>__del__</code>. | |||
** Деструктор может быть опущен, если он ничего не делает. | |||
** Деструктор по умолчанию ничего не делает. | |||
* Копирование и присваивание: | |||
* Присваивание в Python – это всегда копирование ссылки. | |||
* <code>B = A</code> означает, что <code>B</code> – это ссылка на <code>A</code>, а не копия. <code>A</code> и <code>B</code> – две ссылки на один и тот же объект. | |||
* Операцию присваивания нельзя переопределить. | |||
* Нет необходимости в функции оператора присваивания. | |||
=== Инкапсуляция === | |||
* Состояние объекта (данные экземпляра) должно изменяться только через методы. | |||
* Вместо <code>private</code> (как в C++) используются двойные подчеркивания (<code>__</code>) перед именем переменной. | |||
* <code>__x</code> вместо <code>x</code> для закрытых переменных. | |||
=== Свойства (Properties) === | |||
* Простейший способ реализации свойства – использование декоратора <code>@property</code>. | |||
* Декоратор <code>@property</code> указывает, что функция реализует свойство, а не метод. | |||
* Свойство вызывается как атрибут, а не как метод (без скобок). | |||
* Свойства часто бывают доступны только для чтения. | |||
* Попытка присвоить значение свойству только для чтения вызовет ошибку. | |||
* Для создания свойства, которое можно изменять, используется декоратор <code>@property_name.setter</code>. | |||
* Присваивание значения свойству не гарантирует, что свойство действительно получит это значение. | |||
=== Методы === | |||
* Методы реализуются обычным способом, используя <code>self</code> для ссылки на экземпляр. | |||
* <code>self</code> – это экземпляр, указанный при вызове методаб ссылка на объект передается, как параметр <code>self</code>. | |||
* <code>a.dump()</code> вызывает метод, реализованный функцией <code>def dump(self):</code>, причем <code>a</code> становится <code>self</code>. | |||
=== Заключение === | |||
* Обзор основных аспектов реализации классов в Python. | |||
* Рассмотрены: | |||
** Реализация методов, данных и свойств. | |||
** Жизненный цикл объекта: конструктор (<code>__init__</code>), деструктор (<code>__del__</code>). | |||
* Дальнейшие темы: наследование, полиморфизм, мультиметоды и другие аспекты ООП в Python и C++. | |||
Текущая версия от 11:36, 5 марта 2026
Краткое содержание лекции
Введение
- Цель: Реализация класса в Python, аналогичного классу в C++, реализованному в предыдущей лекции.
- Основные элементы реализации:
- Данные экземпляра.
- Методы экземпляра.
- Свойства экземпляра.
- Жизненный цикл объекта: создание, инициализация, деинициализация, удаление.
Основы реализации класса в Python
- Синтаксис:
class MyClass(object):. - Особенность Python --
objectв скобках. - В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего.
- В Python 3 все классы имеют некоторые общие атрибуты, за которые и отвечает
object. - Переменные в Python создаются динамически.
- В функциях, реализующих методы:
- Первый параметр --
self-- ссылка на экземпляр, с которым ведется работа. - Динамическая типизация: типы параметров не указываются.
- Первый параметр --
Жизненный цикл объекта
- Создание объекта:
- Функция создания объекта
__new__в Python реализуется при необходимости, что на практике делается редко. __new__принимает ссылку на класс, а не на экземпляр.
- Функция создания объекта
- Инициализация (Конструктор):
- Определяется с помощью
__init__(self, ...). self– ссылка на экземпляр.- Устанавливает начальные значения для переменных экземпляра.
- Определяется с помощью
- Деинициализация (Деструктор):
- Деструктор реализуется функцией
__del__. - Деструктор может быть опущен, если он ничего не делает.
- Деструктор по умолчанию ничего не делает.
- Деструктор реализуется функцией
- Копирование и присваивание:
- Присваивание в Python – это всегда копирование ссылки.
B = Aозначает, чтоB– это ссылка наA, а не копия.AиB– две ссылки на один и тот же объект.- Операцию присваивания нельзя переопределить.
- Нет необходимости в функции оператора присваивания.
Инкапсуляция
- Состояние объекта (данные экземпляра) должно изменяться только через методы.
- Вместо
private(как в C++) используются двойные подчеркивания (__) перед именем переменной. __xвместоxдля закрытых переменных.
Свойства (Properties)
- Простейший способ реализации свойства – использование декоратора
@property. - Декоратор
@propertyуказывает, что функция реализует свойство, а не метод. - Свойство вызывается как атрибут, а не как метод (без скобок).
- Свойства часто бывают доступны только для чтения.
- Попытка присвоить значение свойству только для чтения вызовет ошибку.
- Для создания свойства, которое можно изменять, используется декоратор
@property_name.setter. - Присваивание значения свойству не гарантирует, что свойство действительно получит это значение.
Методы
- Методы реализуются обычным способом, используя
selfдля ссылки на экземпляр. self– это экземпляр, указанный при вызове методаб ссылка на объект передается, как параметрself.a.dump()вызывает метод, реализованный функциейdef dump(self):, причемaстановитсяself.
Заключение
- Обзор основных аспектов реализации классов в Python.
- Рассмотрены:
- Реализация методов, данных и свойств.
- Жизненный цикл объекта: конструктор (
__init__), деструктор (__del__).
- Дальнейшие темы: наследование, полиморфизм, мультиметоды и другие аспекты ООП в Python и C++.