Реализация на языке Python: различия между версиями
Материал из LERNADO: Информатика и техники
Нет описания правки |
|||
| Строка 15: | Строка 15: | ||
* Синтаксис: <code>class MyClass(object):</code>. | * Синтаксис: <code>class MyClass(object):</code>. | ||
* <code>object<\code> в скобках | * Особенность Python - <code>object<\code> в скобках. | ||
* В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего. | * В C++ экземпляры классов создаются с нуля, без общих черт. Разные классы не имеют ничего общего. | ||
* В Python 3 все классы имеют общие | * В Python 3 все классы имеют некоторые общие атрибуты, за которые и отвечает <code>object</code>. | ||
* Переменные в Python создаются динамически. | * Переменные в Python создаются динамически. | ||
* В функциях, реализующих методы: | * В функциях, реализующих методы: | ||
** Первый параметр --- <code>self</code> --- ссылка на экземпляр, с которым ведется работа. | |||
** Динамическая типизация: типы параметров не указываются. | |||
=== Жизненный цикл объекта === | === Жизненный цикл объекта === | ||
Версия от 11:29, 5 марта 2026
Краткое содержание лекции
Введение
- Цель: Реализация класса в Python, аналогичного классу в C++, реализованному в лекции ... .
- Основные элементы реализации:
- Данные экземпляра.
- Методы экземпляра.
- Свойства экземпляра.
- Жизненный цикл объекта: создание, инициализация, деинициализация, удаление.
Основы реализации класса в Python
- Синтаксис:
class MyClass(object):. - Особенность Python -
object<\code> в скобках. - В 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++.