Объектно-ориентированное программирование на Python: классы, описание и характеристики
Опубликованно 16.12.2017 07:40
В Python классы являются основополагающими понятиями. Это основа стандартную библиотеку самые популярные программы и сам язык. Если вы хотите стать больше, чем просто начинающий программист, вы должны понять суть принципа классы и объекты.
Какие классы
Это основной компонент программного обеспечения ООП. В классах Python используются для реализации новых типов объектов и создаются с помощью инструкции class. Они выглядят как стандартные встроенные типы данных, такие как числа или последовательности. Но объекты класса есть существенное различие – поддерживают наследование.
Объектно-ориентированное программирование на языке Python полностью основан на иерархической наследования классов. Это универсальный способ адаптации и повторного использования кода. Но объектно-ориентированный подход не является обязательным. Питон без проблем допускает чисто процедурное и функциональное программирование.
Главная задача на Python – пакет данных и исполняемого кода. Синтаксически они похожи на деф пользователей. Как функции, они создают свои собственные пространства имен, который может быть многократно вызываться из любой части программы. Зачем они нужны? Классы являются более мощным и универсальным инструментом. Скорее всего, их потенциал раскрывается при создании новых объектов.
Важность классы и наследование
Каждый новый объект имеет свое собственное пространство имен, который может быть запрограммирован на ввод переменных и создавать какие-либо функции. А также имеют атрибуты, унаследованные от класса Object.атрибут. В этом и есть смысл ООП.
Из-за наследства, он создает иерархическое дерево. На практике это выглядит следующим образом. Когда переводчик сталкивается с объектом выражения.атрибут, он начинает искать первое вхождение атрибута в указанный класс. Не найдя атрибут, переводчик продолжает искать во всех связанных классов в ветке выше, слева направо.
В дереве поиска включает:суперклассы, которые находятся на вершине иерархии и реализацию общего поведения;подклассы ниже;копирует элементы программы с унаследованного поведения.
На рисунке показано дерево классов Python. Пример показывает, что класс 2 и 3 – это суперклассов. В нижней части расположены два экземпляра экземпляра 1 и 2, в середине является подклассом класса 1. Если вы пишете Экземпляр2 выражение.Вт, это вызовет переводчика искать значение атрибута .W в следующем порядке:Экземпляр2;Класс1;Класс2;Класс_3.
Имя .Вт ,будут найдены в Класс_3 суперкласса. В терминологии ООП, это означает, что экземпляр 2 "наследует атрибут".W от Класс_3.
Обратите внимание, что экземпляры на рисунке наследовать только четыре атрибута: .Вт .х .Y и .з:Для экземпляров Экземпляр1.х и instance2.атрибут x .х будет найден в 1 классе, где поиск остановится, потому что 1 класс-это в дереве ниже класса 2.Для Экземпляр1.г и instance2.атрибут у .Y будет найден в 1 классе, где поиск остановится, потому что это единственное место где он появляется.Для экземпляров Экземпляр1.Z и Экземпляр2.з переводчика найдете .Z в классе 2, потому что он в дереве слева, чем Класс_3.Для Экземпляр2.имя атрибута .имя будет найден в Экземпляр2 без поиска в дереве.
Предпоследний абзац-самый важный. Он демонстрирует, как 1 класс переопределяет атрибут .х, замена версии .х суперкласс класса 2. Объекты, экземпляры и методы
ООП оперирует двумя основными понятиями: классы и объекты. Классы создавать новые типы, а объекты класса в Python экземпляров. Например, все переменные целочисленные, которые касаются встроенный тип данных int. На языке ООП, они являются экземплярами класса инт.
Классы создаются инструкции и объекты через звонки. Они могут хранить данные и представлять функций или методов классов. В Python терминология играет важную роль. С его программисты помогите отличить независимых функций от тех, которые относятся к классам. Переменные, относящиеся к объектам, называются полями.
Существует два типа полей в ООП. Первый-это переменные, которые принадлежат всему классу, второй переменные являются отдельные экземпляры. Поля и методы в совокупности являются атрибутами класса. В Python они написаны в блоке кода после ключевого слова class.
Методы и значение собственной личности
Методы-это функции с дополнительными имени себя. Он добавляется в начало списка параметров. При желании, переменная может иметь разные названия, но эта инициатива среди программистов не приветствуется. Самостоятельно стандартная, легко узнаваемое имя в коде. Кроме того, он рассчитал некоторые среды разработки.
Чтобы лучше понять значение личности в ООП, допустим, у нас есть Класс с именем класса и метода, что и methoda:>>>класс класса;деф что и methoda (самовыдвижение, арг1, арг2).
Объект objectA-это экземпляр класса и вызвать метод выглядит следующим образом:>>>objectA.что и methoda(аргумент1, аргумент2).
Когда переводчик видит эту строку, она будет автоматически преобразовать следующим: класса.что и methoda(objectA, арг1, арг2). То есть экземпляр класса использует переменную Self в качестве эталона для себя.
Как создать переменные, методы и экземпляры классов
Мы предлагаем Вам проанализировать практический пример из интерактивной оболочки Python. Создание класса "Experimentary" начинается с составного класса пользователей:>>>Eksperimentiruya класс:деф setinf(самовыдвижение, значение): #создать метод с аргументамисамовывоз.данные = значениеРазрешение дисплея(самовыдвижение): #второй способпечати(самовыдвижение.данных) #печать данных экземпляра.
После обязательного отступа следует блок с инструкциями, вложенные в деф, в котором два объекта функции приведены имена setinf и дисплей. Они помогают создать Eksperimentiruya атрибутами.setinf и Eksperimentiruya.дисплей. На самом деле, любое имя, которое будет присвоено значение на верхнем уровне во вложенном блоке становится атрибутом.
Чтобы увидеть, как работают методы, вы должны создать два экземпляра:>>>х = Eksperimentiruya () # создать два экземпляра;>>>г = Eksperimentiruya () # в каждом отдельном пространстве имен.
Изначально, в случаях, не разглашать информацию и совершенно пустой. Но они связаны со своим классом:>>>х.setinf("изучаем Python") #вызов метода, в котором само это x.>>>г.setinf(3.14) #эквивалентно: Eksperimentiruya.setinf(г, 3.14)
Если используя имя экземпляра х, Y относятся к атрибуту .Eksperimentiruya объект класса setinf, затем поиск в дереве наследования, интерпретатор возвращает значение атрибута class.>>>х.дисплей() #X и Y значения вашей собственной личности.данныеИзучать Python>>>г.дисплей()3.14.
Перегрузка операторов
В Python, классы, перегрузка операторов в выражениях. Эта возможность делает экземпляры похожи на встроенные типы данных. Процесс заключается в реализации методов со специальными именами, начинающиеся и заканчивающиеся двойным подчеркиванием.
Рассмотрим действие __init__ и __суб__. Первый метод называется конструктором класса. В Python __init__, которая выполняет перегрузка операции для создания. Второй метод __подпункт__ реализующий вычитание.>>>класс перегрузки: #создать новый классдеф __инит__(самостоятельная, начала):самовывоз.данные = стартдеф __суб__(самовывоз, прочее): # минус другой экземплярвозвращение перегрузки(самовыдвижение.данных - другое) #результатом является новый экземпляр>>>А = перегрузка(10) #__инит__(А, 10)>>>Б = А – 2 #__суб__(Б, 2)>>>Данные Б. #B является новый экземпляр класса перегрузки8.Подробнее о методе __init__, которая
Метод __init__, которая чаще всего используется при работе с классами. Это необходимо для инициализации различных объектов. __инит__ не нужен отдельный вызов. Когда вы создаете новый метод экземпляра автоматически получает аргументов, указанных в скобках.
Используя методы перегрузки, вы можете осуществлять любые операции со встроенными типами данных. Большинство из них используются только для специальных применений, где объекты должны имитировать поведение стандартных объектов.
Методы, унаследованные от суперклассов и не являются обязательными. На начальных стадиях можно легко обойтись без них. Но для полного погружения в программирование и суть ООП навык работы с операторами.
Метод __метод getitem__
Метод __метод getitem__ выполняет перегрузки доступа к элементу по индексу. Если это наследство или существует в определении класса, каждая операция индексирования, переводчик будет вызывать его автоматически. Например, когда экземпляр Ф появляется в выражении возвращает элемент по индексу, например F[я], Питон называет __метод getitem__, передает объект в качестве первого аргумента и индекса указывается в квадратных скобках во втором.
Следующий класс "Primaryinterface" возвращает квадрат значение индекса:>>>Primaryinterface класс:деф __метод getitem__(самовыдвижение, индекс):возвращение индекса ** 2>>>Ф = Primaryindex ()>>>Ф[2] #выражение F[я] называет Ф.__метод getitem__(я)4>>>для я в диапазоне(5):печать(F[I], на конец=" ") # звонки __метод getitem__(Ф, я) в каждой итерации0 1 4 9 16
Используя этот же метод, вы можете выполнить операцию извлечения среза, к которому часто используются при работе с последовательностями. Для обработки списков стандартный синтаксис этой операции следующий:>>>Список = [13, 6,"", "", 74,9]>>>Список[2:4]["и", "с"]>>>Список[1:][6, "и", "с", 74,9]>>>Список[:-1][13, 6,"", "С"]>>>Список[::2][13, "и", 74,9]
Класс, который реализует __метод getitem__:>>>класс Индексатора:Мыйзакюле = [13, 6,"", "", 74,9]деф __метод getitem__(самовыдвижение, индекс): #вызывается при индексирование и извлечение срезапечати("метод getitem: ", индекс)вернуться самостоятельно.moishezon[индекс] #не индексировать или извлекает кусочек>>>Х = Индексатор()>>>Х[0] #индексация __метод getitem__ возвращает целое числометод getitem: 013>>>Х[2:4] # при извлечении ломтик __метод getitem__ получает кусочекметод getitem: ломтик(2, 4, нет)["и", "с"]
Обращения к атрибутам
Получить ссылки на атрибут, используется специальный метод и __getattr__. Это называется с именем атрибута как строка в случае обнаружения попытки связать несуществующие или неопределенный атрибут. Когда переводчик способен обнаружить необходимый объект в дереве наследования, и __getattr__.не вызывается.
Удобный способ для обобщенной обработки запросов к атрибутам:>>>класс ушел:деф и __getattr__(самовыдвижение, atname):если atname == "возраст":вернуться 20другое:поднять AttributeError, atname>>>Д = Ушла()>>>D. возраст20>>>Имя д.AttributeError: имя
Класс ушел, а его экземпляр D его атрибутами нет. Поэтому, при обращении к Д. возраст автоматически вызывает метод и __getattr__. Экземпляр передается как самоназвание, а название неопределенного "возраста" в строке atname. Класс возвращает результат применения имени Д. возраст, несмотря на то, что этот атрибут не имели.
Если класс не предусматривает обработки атрибута, метод и __getattr__ причины встроенное исключение, и дает переводчику информацию о том, что имя на самом деле неопределенными. В этом случае попытка сослаться на имя Д. приводит к ошибкам.
То же самое относится и к методу перегрузку операторов __setattr__, перехватывая все попытки присвоить значение атрибута. Если этот метод прописано в теле класса, выражение "самостоятельно.атрибут = значение" преобразуется в вызов метода самообслуживания.__setattr_("атрибутов", значения).
Мы описали только несколько из существующих способов перегрузки. Весь список есть в стандартном руководстве языка и включает много наименований.Дополнительные возможности
ООП иногда используется для сложных и нестандартных задач. Благодаря наследования классов в Python, поведение встроенных типов данных и их функции поддаются расширению и адаптации.
Если Вы не счастливы с тем, что индексация в последовательности начинается с нуля, вы можете исправить его с помощью инструкции class. Вам нужно создать подкласс список с новыми именами всех видах, и осуществить необходимые изменения. Также в ООП в Python декораторы функций, статических методов и многих других сложных и специальных методов.
Категория: Техника