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

Материал из LERNADO: Информатика и техники
Строка 26: Строка 26:


*  Создание объекта:
*  Создание объекта:
    **  Функция создания объекта <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> – две ссылки на один и тот же объект.
    *  Операцию присваивания нельзя переопределить.
*  Операцию присваивания нельзя переопределить.
    *  Нет необходимости в функции оператора присваивания.
*  Нет необходимости в функции оператора присваивания.


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

Версия от 11:31, 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++.