Объектно-ориентированное программирование на Python: классы, описание и особенности


Опубликованно 28.12.2017 03:13

Объектно-ориентированное программирование на Python: классы, описание и особенности

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

Что такое классы

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

Объектно-ориентированное программирование в Python полностью основана на иерархическом наследования классов. Он является универсальным методом адаптации и повторного использования кода. Но объектно-ориентированный подход не является обязательным. Python позволяет без проблем исключительно процедурное и функциональное программирование.

Главная задача классов в Python – упаковка данных и исполняемого кода. Синтаксически они являются def похожи на инструкции. Подобно функциям, они создают свои собственные пространства имен, в котором вы всегда можете вызвать из любой части программы. Зачем они тогда вообще нужны? Классы – это более мощный и универсальный инструмент. Наиболее сильно их потенциал раскрывается в момент создания нового объекта.

Важность классы и принцип наследственности

На каждом новом объекте есть свое пространство имен, программирование, ввод переменных и создать любую функцию. И есть также атрибуты, которые от класса object атрибуты. Таков смысл ООП.

Через дерево наследования возникает иерархия. На практике это выглядит следующим образом. Если интерпретатор термин объект применяется.атрибуты, он ищет первое вхождение атрибутов в указанном классе. Нашел атрибуты, интерпретатор продолжает искать все соответствующие классы, которые на вершине дерева, в направлении слева направо.

В дереве ищут:предоставьте, которые находятся на вершине иерархии и реализует общее поведение;Подклассы – расположенные ниже;Экземпляры элементы программы с унаследованного поведения.

На рисунке показано дерево Python-классами. Из этого примера видно, что класс 2 и 3 это предоставьте. На дне два экземпляра Instance 1 и 2 расположены в центре – подкласс класса 1. Когда вы пишете фразу Instance2.w, он будет искать интерпретатор значение атрибута .w в следующем порядке:Instance2;Class1;Class2;Class3.

Имя .w ,найденный в предоставь Class3. По терминологии ООП – это означает, что экземпляр 2 «наследует» атрибут .w Class3.

Пожалуйста, обратите внимание, что экземпляры наследуют Рисунок только четыре атрибута: .w, .х, .y и .z:Для Экземпляров Instance1.х и Instance2.x-атрибута .х был в 1 классе, где остановить поиски, так как 1 класс в структуре ниже, чем 2 Класс.Для Instance1.y и Instance2.y-атрибута .y будет найден в 1 класс, где остановить поиск, потому что он кажется единственное место, где.Для Экземпляров Instance1.z и Instance2.z-интерпретатор находит .z в классе 2, потому что она находится в дереве слева как Class3.Для Instance2.атрибут name .имя Instance2 будет найти без поиска по дереву.

Предпоследний пункт является самым важным. Он показывает, как класс переопределяет атрибут 1 .x, чтобы заменить версию .x суперкласса 2 Класс. Объекты, экземпляры и методы

ООП работает два основных понятия: классы и объекты. Классы создают новые типы, классы и объекты в Python являются их экземпляры. Например, все целочисленные переменные относятся к встроенному типу данных int. На языке ООП, которые являются экземплярами класса int.

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

Существует два типа полей в ООП. Первое-это переменная, которая принадлежит всем классом, вторая – переменные отдельных экземпляров. Поля и методы общего атрибуты класса. В Python они будут в блоке кода после ключевого слова class.

Методы и стоимость хотя

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

Чтобы лучше понять сам смысл в ООП, представьте себе, что у нас есть класс с именем ClassA и метод methodA:>>>class ClassA;def methodA (self, аргумент, аргумент).

Объект objectA-это экземпляр ClassA и вызов метода выглядит следующим образом:>>>objectA.methodA(аргумент, аргумент).

Когда интерпретатор видит эту строку, он автоматически переводит следующим образом: ClassA.methodA(objectA, аргумент, аргумент). То есть экземпляр класса используется переменная self как ссылку на себя.

Создание переменных, методов и экземпляров классов

Предлагаем разобрать практический пример из интерактивной оболочки Python. Создание класса «Экспериментировать» начинается с составной оператор class:>>>class Экспериментировать:def setinf(self, value): #создаем первый метод с аргументамиself.data = valuedef display(self): #второй способprint(self.data) #данные печати экземпляра.

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

Чтобы увидеть, как эти методы работают, создайте два экземпляра:>>>x = Поэкспериментировать () # Создает два экземпляра;>>>y = Поэкспериментировать () # все другое пространство имен.

Изначально экземпляры не хранит никакой информации и абсолютно пустыми. Но они со своим классом:>>>x. setinf(«Обучение Python») #вызов метода, self – x.>>>y. setinf(3.14) #Соответствует: Экспериментировать.setinf(y, 3.14)

Если через имя экземпляра x, y на один атрибут .setinf объект класса Экспериментировать, который обеспечивает при поиске по дереву наследования интерпретатор значение атрибута класса.>>>x. дисплей() #x и y Имеют свои ценности самостоятельно.dataВыучить Python>>>y. дисплей()3.14.

Перегрузка операторов

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

Рассмотрим в действии __init__ и __sub__. Первый метод называется конструктором. В Python __init__ перегрузку операций приводит экземпляр. Второй метод __sub__ реализует вычитание.>>>class Перегрузки: #создает новый классdef __init__(self, start):self.data = стартdef __sub__(self, other): # экземпляр минус otherreturn Перегрузки(автоматический.data - other) #результатом будет новый экземпляр>>>A = Перегрузка(10) #__init__(A, 10)>>>B = A – 2 #__sub__(B, 2)>>>B. data #B является Перегрузочная новый экземпляр класса8.Подробнее о методе __init__

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

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

Методы суперклассов и наследники не являются обязательными. На начальном этапе вы сможете легко обойтись без них. Но для полного погружения в суть программирования и ООП навык нуждается в работе с операторами.

Метод __getitem__

Метод __getitem__ приводит перегрузка доступа к элементу по индексу. Если это передается по наследству или является определен в классе, то при каждой операции индексирования интерпретатор вызывается автоматически. Например, если экземпляр появляется в выражении F после извлечения индекс элемента, например, F[i], интерпретатор Python метод __называет getitem__, состоящее из F в качестве первого аргумента и индекса в квадратных скобках указано, во второй.

Следующий класс «Премьер» поставляет квадрат значения индекса:>>>class Премьер:def __getitem__(self, index):return index ** 2>>>F = Премьер ()>>>F[2] #выражение F[i] называет ф.__getitem__(i)4>>>for i in range(5):print(F[i], end=« ») # Зовет __getitem__(F, i) в каждой итерации0 1 4 9 16

С помощью этого метода можно прибегать к операции извлечения среза, на которые часто возвращаются во время работы с последовательностями. При обработке списков стандартный синтаксис для операций выглядит следующим образом:>>>Список = [13, 6, «а», «с», 74,9]>>>Список[2:4][«и», «C»]>>>Список[1:][6, «и», «с», 74,9]>>>Список[:-1][13, 6, «а», «C»]>>>Список[::2][13, «и», 74,9]

Класс, метод __getitem__:>>>class индексатор:Musik = [13, 6, «а», «с», 74,9]def __getitem__(self, index): #Вызывается при индексации или получения граничной частотыprint(«getitem: », index)return self.Musik[index] #индексация или извлечены сечения>>>X = Indexer()>>>X[0] #индексация __getitem__ получает целое числоgetitem: 013>>>X[2:4] # При получении предельная частота __getitem__ получает объект граничной частотыgetitem: slice(2, 4, None)[«и», «C»]

Лечение атрибутами

Ссылка на атрибут специальный метод __getattr__. Он вызывается с именем атрибута как строка в случаях обнаружения попытки ссылку на несуществующий или неопределенный атрибут. Если интерпретатор искомый объект обнаруживает в дереве наследования, __getattr__.не вызывается.

Метод подходит для лечения генерализованной запросов к атрибутам:>>>class Gone:def __getattr__(self, atname):if atname == «age»:return 20else:raise AttributeError, atname>>>D = Gone()>>>D. age20>>>D. имяAttributeError: имя

Класс Gone и его экземпляр D его атрибуты не. Поэтому при обращении к то автоматически age метод __getattr__. Сам экземпляр будет как самостоятельно, так и наименованием неопределенный «возраст» в atname. Класс дает результат обращения на имя D. age, несмотря на то, что этот атрибут не имеет.

Если класс не вызывает для лечения атрибута, метод __getattr__ подавлении, и вследствие этого переводчик передает информацию о том, что имя на самом деле туманно. В этом случае попытка ведет к имени то имя с ошибкой.

Аналогичным образом перегрузку операторов __setattr__ работает путем любая попытка присвоить значение атрибуту. Когда поступил этот метод в теле класса, выражение «сам.Атрибут = значение» self преобразуется в вызов метода.__setattr_(атрибут, значение).

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

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

Если вы не можете решить, как и тот факт, что индексация начинается в порядке сначала, с помощью инструкции class. Для этого необходимо создать дочерний класс типа list с новым именем всех типов и реализовывать необходимые изменения. Также в ООП в Python есть декораторы функций, статические методы и многие другие сложные и специальные методы.



Категория: Мобильная техника