ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Фреймворк Bootstrap

Жизнь не в том, чтобы жить, а в том, чтобы чувствовать, что живешь (В.О. Ключевский).

Python 3 – Объектно-ориентированный язык

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Python 3 - объектно-ориентированный язык
Python является объектно-ориентированным языком с того времени, как он начал существовать. В связи с этим, создание и использование классов и объектов прямо-таки легко. Эта глава поможет вам стать экспертом в использовании объектно-ориентированного программирования в Python.

Если у вас нет какого-либо предыдущего опыта работы с объектно-ориентированным (ОО) программированием, вы можете пройти вводный курс по нему или, по крайней мере, прочитать учебник, чтобы у вас было понимание основных концепций.

Однако, здесь есть небольшое введение в объектно-ориентированное программирование (ООП), чтобы помочь вам:

Обзор терминологии ООП

  • Класс – определенный пользователем прототип для объекта, который определяет набор атрибутов, которые характеризуют любой объект класса. Атрибуты являются членами данных (переменные класса и переменные экземпляра) и методы, доступ к которым  с помощью запись через точку.
  • Переменная класса – переменная, которая разделяется всеми экземплярами класса. Переменные класса определяются в пределах класса, но не в любом методе класса. Переменные класса не используются так часто, как переменные экземпляра.
  • Элемент данных – класс переменной или экземпляра переменной, которая содержит данные, связанные с классом и его объектами.
  • Перегрузка функций – присвоение более одного поведения определенной функции. Выполняемая операция зависит от типов задействованных объектов или аргументов.
  • Переменная экземпляра – переменная, определенная внутри метода и относится только к текущему экземпляру класса.
  • Наследование – передача характеристик одного класса к другим классам, которые являются производными от него.
  • Экземпляр – индивидуальный объект определенного класса. Объект OBJ, который принадлежит к классу Circle, например, является экземпляром класса Circle.
  • Instantiation – создание экземпляра класса.
  • Метод – особый вид функции, который определяется в определении класса.
  • Объект – уникальный экземпляр структуры данных, который определяется его классом. Объект включает в себя как элементы данных (переменные класса и переменные экземпляра) и методы.
  • Перегрузка операторов – Назначение более одной функции к конкретному оператору.

Создание классов

Оператор class создает новое определение класса. Имя класса следует сразу за ключевым словом class с последующим двоеточием, следующим образом:

 

  • Класс имеет строку документации, доступ к которой осуществляется через ClassName .__ doc__.
  • Class_suite состоит из всех компонентов утверждений, определяющих члена класса, атрибуты данных и функцию.

Пример

Ниже приведен пример простого класса в Python:

 

  • Переменная empCount является переменной класса, чье значение является общим для всех экземпляров этого класса. Она может быть доступна как Employee.empCount внутри класса или вне класса.
  • Первый метод __init __ () это специальный метод, который вызывается конструктор класса или метод инициализации, Python требует при создании нового экземпляра этого класса.
  • Вы объявляете другие методы класса, как обычные функции, за исключением того, что первый аргумент каждого метода является самостоятельным . Python добавляет аргумент self в список для вас; Вам не нужно включать его при вызове методов.

Создание экземпляров объектов

Для создания экземпляров класса, вызывается класс, используя имя класса и передать в аргументах метод  __init__.

 

Доступ к атрибутам

Вы можете получить доступ к атрибутам объекта, используя оператор точка с объектом. Переменная класса получит доступ, используя имя класса следующим образом:

 

Теперь, сложив все понятия вместе:

 

Когда этот код выполниться, он выведет следующий результат:

 

Вы можете добавлять, удалять или изменять атрибуты классов и объектов в любое время:

 

Вместо того, чтобы использовать обычные заявления атрибутов доступа, вы можете использовать следующие функции:

  • GetAttr (объект, имя [, по умолчанию]) – для доступа к атрибуту объекта.
  • Hasattr (объект, имя) – проверить, существует атрибут или нет.
  • SetAttr (объект, имя, значение) – установить атрибут. Если атрибут не существует, то он будет создан.
  • Delattr (объект, имя) – для удаления атрибута.
 

Встроенные атрибуты класса

Каждый класс Python поддерживает следующие встроенные атрибуты и их можно получить с помощью оператора точки, как и любой другой атрибут:

  • __dict__ – Словарь, содержащий пространство имен класса.
  • __doc__ – Документация класса string или нет, если не определено.
  • __name__ – Имя класса.
  • __module__ – Имя модуля, в котором определен класс. Это атрибут «__main__» в интерактивном режиме.
  • __bases__ – Возможно пустой кортеж, содержащий базовые классы, в порядке их появления в списке базового класса.

Для приведенного выше класса давайте попробуем открыть все эти атрибуты:

 

Когда этот код выполниться, он производит следующий результат:

Уничтожение объектов (Garbage Collection)

Python удаляет ненужные объекты (встроенные типы или экземпляры классов) автоматически, чтобы освободить место в памяти. Процесс, посредством которого Python периодически восстанавливает блоки памяти, которые больше не находятся в использовании называется как сборщики мусора.

Сборщик мусора в Python работают во время выполнения программы и срабатывают, когда счетчик ссылок объекта достигает нуля. Счетчик ссылок объекта изменяется, как число псевдонимов, которые указывают на ее изменения.

Счетчик ссылок объекта увеличивается, когда ему присваивается новое имя или помещается в контейнер (список, кортеж, или словарь). Счетчик ссылок объекта уменьшается, когда он удаляется с del, его ссылка переназначается, или его ссылка выходит из области видимости. Когда счетчик ссылок объекта достигает нуля, Python собирает его автоматически.

 

Как правило, вы не замечаете, когда сборщик мусора уничтожает обнулившийся экземпляр и высвобождает его пространство. Тем не менее, класс может реализовать специальный метод  __del __(), называется деструктор, который вызывается, когда экземпляр собирается быть уничтоженным. Этот метод может быть использован для очистки любых ресурсов из памяти, используемых экземпляр.

Пример

Деструктор __del __ () печатает имя класса экземпляра, который собирается быть уничтожен:

 

Когда этот код выполниться, он выведет следующий результат:

 

Примечание:
В идеале, если вы хотите определить свои классы в отдельном файле, то вы должны импортировать их в основной файл программы с помощью заявления import.

В приведенном выше примере, предполагая определение класса точки, содержащейся в point.py и нет никакого другого исполняемого кода в нем.

 

Наследование классов

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

Дочерний класс наследует атрибуты своего родительского класса, и вы можете использовать эти атрибуты, как если бы они были определены в дочернем классе. Дочерний класс может также переопределить элементы данных и методы от родителей.

Синтаксис

Производные классы объявляются так же, как их родительский класс; Однако, список базовых классов наследуются после имени класса:

 

Пример

 

Когда этот код выполнится, он выведет следующий результат:

 

Аналогичным образом, вы можете управлять классом от нескольких родительских классов следующим образом:

 

Вы можете использовать функции issubclass() или isinstance() для проверки отношения двух классов и экземпляров.

  • Функция issubclass(sub, sup) возвращает логическое значение true, если данный подкласс sub действительно подкласс суперкласса sup.
  • Функция isinstance(obj, Class) возвращает логическое true, если obj является экземпляром класса Class или является экземпляром подкласса Class.

Переопределение методов

Вы всегда можете переопределить методы родительского класса. Одной из причин переопределения методов родителя является то, что вы можете использовать специальную или иную функцию в подклассе.

Пример

 

Когда этот код выполнится, он выведет следующий результат:

Методы базовой перегрузки

В следующей таблице перечислены некоторые общие функциональные возможности, которые вы можете переопределить в своих классах:

Метод, описание и пример вызова
1 __init__ ( self [,args…] )

Конструктор (с любыми дополнительными аргументами)

Пример вызова: obj = className(args)

2 __del__( self )

Деструктор, удаляет объект

Пример вызова: del obj

3 __repr__( self )

Evaluatable строковое представление

Пример вызова: repr(obj)

4 __str__( self )

Версия для печати строкового представления

Пример вызова: str(obj)

5 __cmp__ ( self, x )

Сравнение объектов

Пример вызова: cmp(obj, x)

Перегрузка операций

Предположим, что вы создали класс Vector для представления двухмерных векторов. Что происходит, когда вы используете оператор плюс, чтобы добавить их? Скорее всего, Python будет ругаться на вас.

Можно, однако, определить метод  __add__ в классе для выполнения векторного сложения, а затем оператор плюс будет вести себя в соответствии с ожиданиями:

Пример

 

Когда этот код выполнится, он выведет следующий результат:

Скрытие данных

Атрибуты объекта могут быть или не могут быть видимыми вне определения класса. Вы должны вызвать атрибуты с префиксом двойного подчеркивания, и эти атрибуты тогда не будут непосредственно видны посторонним.

Пример

 

Когда этот код выполнится, он выведет следующий результат:

 

Python защищает эти члены путем внутреннего изменения имени, чтобы включить имя класса. Вы можете получить доступ к таким атрибутам, как объект ._className__attrName. Если вы заменили бы последнюю строку следующим образом, то она заработает

 

Когда этот код выполниться, вывод будет следующий:

Python 3 - объектно-ориентированный язык

Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Простая логическая игра "Поймай кота". Задача игры окружить кота точками так, чтобы он не смог убежать с поля. Постигла неудача - начни игру снова!

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close