Сообщить об ошибке.

Введение: классы в языке Python, общие моменты.

Классы предоставляют средства объединения данных и функциональности вместе. Создание нового класса создает новый тип объекта, позволяя создавать новые экземпляры этого типа. К каждому экземпляру класса могут быть прикреплены атрибуты для поддержания его состояния. Экземпляры класса также могут иметь методы, определяемые его классом, для изменения его состояния.

По сравнению с другими языками программирования, механизм классов Python добавляет классы с минимумом нового синтаксиса и семантики. Это смесь механизмов класса, взятых из языков программирования C++ и Modula-3. Классы Python предоставляют все стандартные возможности объектно-ориентированного программирования:

  • механизм наследования классов позволяет использовать несколько базовых классов,
  • производный класс может переопределять любые методы своего базового класса или классов,
  • метод может вызывать метод базового класса с тем же именем.
  • объекты могут содержать произвольные объемы и типы данных.
  • как и в случае с модулями, классы имеют динамическую природу Python: они создаются во время выполнения и могут быть изменены после создания.

В терминологии языка C++, как правило, члены класса, включая элементы данных, являются открытыми (за исключением закрытых переменных) и все функции-члены являются виртуальными. В Python нет сокращений для ссылки на члены объекта из его методов: функция метода объявляется с явным первым аргументом self, представляющим объект, который неявно предоставляется вызовом. Классы в Python сами по себе являются объектами, что обеспечивает семантику для импорта и переименования. В отличие от C++ и Modula-3, встроенные типы могут использоваться в качестве базовых классов для расширения их пользователем. Также, как и в C++, большинство встроенных операторов со специальным синтаксисом (арифметические операторы, подписка и т. д.) можно переопределить для экземпляров класса.

Объектно-ориентированная семантика Modula-3 ближе к семантике Python, чем C++.

Имена и объекты классов.

Объекты имеют индивидуальность, и несколько имен (в нескольких областях видимости) могут быть связаны с одним и тем же объектом. В других языках это называется псевдонимами. Это обычно не принимается во внимание при первом взгляде на Python, и может быть безопасно проигнорировано при работе с неизменяемыми базовыми типами - числами, строками, кортежами. Однако псевдонимы могут иметь неожиданный эффект на семантику кода Python, использующего изменяемые объекты, такие как списки, словари и большинство других типов.

Такое поведение используется в интересах программы, так как псевдонимы ведут себя как указатели в некоторых отношениях. Например, передача объекта является дешевой, так как реализация передает только указатель и если функция изменяет объект, передаваемый в качестве аргумента, вызывающий объект увидит изменение - это устраняет необходимость в двух различных механизмах передачи аргументов, как в языке Pascal.