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

Материал из LERNADO: Информатика и техники
Строка 42: Строка 42:
*  Нет необходимости в функции оператора присваивания.
*  Нет необходимости в функции оператора присваивания.


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


*  Состояние объекта (данные экземпляра) должно изменяться только через методы.
*  Состояние объекта (данные экземпляра) должно изменяться только через методы.

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