Реализация на языке Python: различия между версиями

Материал из LERNADO: Информатика и техники
Нет описания правки
 
(не показано 6 промежуточных версий этого же участника)
Строка 5: Строка 5:
=== Введение ===
=== Введение ===


*  Цель: Реализация класса в Python, аналогичного классу в C++, реализованному в лекции ... .
*  Цель: Реализация класса в Python, аналогичного классу в C++, реализованному в [[Реализация на языке C++|предыдущей лекции]].
*  Основные элементы реализации:
*  Основные элементы реализации:
**  Данные экземпляра.
**  Данные экземпляра.
Строка 15: Строка 15:


*  Синтаксис: <code>class MyClass(object):</code>.
*  Синтаксис: <code>class MyClass(object):</code>.
*  <code>object<\code> в скобках – особенность Python.
Особенность Python -- <code>object</code> в скобках.
*  В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего.
*  В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего.
*  В Python 3 все классы имеют общие свойства между экземплярами.
*  В Python 3 все классы имеют некоторые общие атрибуты, за которые и отвечает <code>object</code>.
*  Переменные в Python создаются динамически.
*  Переменные в Python создаются динамически.
*  В функциях, реализующих методы:
*  В функциях, реализующих методы:
    **  <code>self</code> --- параметр, ссылающийся на экземпляр, с которым ведется работа.
**  Первый параметр -- <code>self</code> -- ссылка на экземпляр, с которым ведется работа.
    **  Динамическая типизация: типы параметров не указываются.
**  Динамическая типизация: типы параметров не указываются.


=== Жизненный цикл объекта ===
=== Жизненный цикл объекта ===


*  Создание объекта:
*  Создание объекта:
    **  Функция создания объекта <code>__new__</code> в Python реализуется при необходимости, что на практике делается редко.
**  Функция создания объекта <code>__new__</code> в Python реализуется при необходимости, что на практике делается редко.
    **  <code>__new__</code> принимает ссылку на класс, а не на экземпляр.
**  <code>__new__</code> принимает ссылку на класс, а не на экземпляр.
*  Инициализация (Конструктор):
*  Инициализация (Конструктор):
    **  Определяется с помощью <code>__init__(self, ...)</code>.
**  Определяется с помощью <code>__init__(self, ...)</code>.
    **  <code>self</code> – ссылка на экземпляр.
**  <code>self</code> – ссылка на экземпляр.
    **  Устанавливает начальные значения для переменных экземпляра.
**  Устанавливает начальные значения для переменных экземпляра.
*  Деинициализация (Деструктор):
*  Деинициализация (Деструктор):
    **  Деструктор реализуется функцией <code>__del__</code>.
**  Деструктор реализуется функцией <code>__del__</code>.
    **  Деструктор может быть опущен, если он ничего не делает.
**  Деструктор может быть опущен, если он ничего не делает.
    ** Деструктор по умолчанию ничего не делает.
** Деструктор по умолчанию ничего не делает.
*  Копирование и присваивание:
*  Копирование и присваивание:
    *  Присваивание в Python – это всегда копирование ссылки.
*  Присваивание в Python – это всегда копирование ссылки.
    *  <code>B = A</code> означает, что <code>B</code> – это ссылка на <code>A</code>, а не копия. <code>A</code> и <code>B</code> – две ссылки на один и тот же объект.
*  <code>B = A</code> означает, что <code>B</code> – это ссылка на <code>A</code>, а не копия. <code>A</code> и <code>B</code> – две ссылки на один и тот же объект.
    *  Операцию присваивания нельзя переопределить.
*  Операцию присваивания нельзя переопределить.
    *  Нет необходимости в функции оператора присваивания.
*  Нет необходимости в функции оператора присваивания.


=== Инкапсуляция ===
=== Инкапсуляция ===


*  Состояние объекта (данные экземпляра) должно изменяться только через методы.
*  Состояние объекта (данные экземпляра) должно изменяться только через методы.
Строка 68: Строка 68:
*  Обзор основных аспектов реализации классов в Python.
*  Обзор основных аспектов реализации классов в Python.
*  Рассмотрены:
*  Рассмотрены:
    **  Реализация методов, данных и свойств.
**  Реализация методов, данных и свойств.
    **  Жизненный цикл объекта: конструктор (<code>__init__</code>), деструктор (<code>__del__</code>).
**  Жизненный цикл объекта: конструктор (<code>__init__</code>), деструктор (<code>__del__</code>).
*  Дальнейшие темы: наследование, полиморфизм, мультиметоды и другие аспекты ООП в Python и C++.
*  Дальнейшие темы: наследование, полиморфизм, мультиметоды и другие аспекты ООП в 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++.