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



В этом блоге на тему «Класс Python» рассматриваются основы классов, атрибутов и различные концепции OOPS, такие как наследование, полиморфизм и инкапсуляция.

После того, как Stack Overflow предсказал, что к 2019 году Python превзойдет другие языки с точки зрения активных разработчиков, спрос на только растет.Python следует парадигме объектно-ориентированного программирования. Он занимается объявлением классов python, созданием из них объектов и взаимодействием с пользователями. На объектно-ориентированном языке программа разбита на автономные объекты или, можно сказать, на несколько мини-программ. Каждый объект представляет отдельную часть приложения, которая может взаимодействовать между собой.
В этом блоге о классах python вы поймете каждый аспект классов и объектов в следующей последовательности:

Давайте начнем.:-)





Что такое класс Python?

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

ClassesAndObjects - класс Python - EdurekaНа первом изображении (A) он представляет собой план дома, который можно рассматривать как Класс . С одним и тем же планом мы можем создать несколько домов, и их можно рассматривать как Объекты . Используя класс, вы можете придать своим программам единообразие, чтобы их можно было использовать более чистыми и эффективными способами. Атрибуты - это члены данных (переменные класса и переменные экземпляра) и методы, доступ к которым осуществляется через точечную нотацию.



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

Теперь давайте продолжим и посмотрим, как это работает в PyCharm. Для начала ознакомьтесь с синтаксисом класса python.

Синтаксис :

class Имя_класса: оператор-1. . заявление-N

Здесь « класс' оператор создает новое определение класса. Название класса следует сразу за ключевым словом « класс' в Python, за которым следует двоеточие. Чтобы создать класс на Python, рассмотрим следующий пример:



класс employee: передать # атрибутов и методов нет emp_1 = employee () emp_2 = employee () # экземпляр переменной можно создать вручную emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Вывод -

aayushi@edureka.co test@company.com

реализация связного списка в c

Теперь, что, если мы не хотим вручную устанавливать эти переменные. Вы увидите много кода, а также он подвержен ошибкам. Итак, чтобы сделать это автоматическим, мы можем использовать метод «init». Для этого давайте разберемся, что такое методы и атрибуты в классе Python.

Методы и атрибуты в классе Python

Теперь создание класса неполно без некоторой функциональности. Таким образом, функциональные возможности могут быть определены путем установки различных атрибутов, которые действуют как контейнер для данных и функций, связанных с этими атрибутами. Функции в Python также называются Методы . Говоря о в этом метод , это специальная функция, которая вызывается всякий раз, когда создается новый объект этого класса. Вы можете думать об этом как о методе инициализации или как о конструкторах, если вы пришли из любого другого объектно-ориентированного программирования, такого как C ++, Java и т. Д. Теперь, когда мы устанавливаем метод внутри класса, они автоматически получают экземпляр. Давайте продолжим работу с классом python и примем имя, фамилию и зарплату с помощью этого метода.

сотрудник класса: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.'. + last + '@ company.com' emp_1 = сотрудник ('aayushi', 'johari', 350000) emp_2 = сотрудник ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Теперь в нашем методе init мы установили эти переменные экземпляра (self, first, last, sal). Self - это экземпляр, который означает, что всякий раз, когда мы пишем self.fname = first, он совпадает с emp_1.first = ’aayushi’. Затем мы создали экземпляры класса сотрудников, в которые мы можем передавать значения, указанные в методе инициализации. Этот метод принимает экземпляры в качестве аргументов. Вместо того, чтобы делать это вручную, это будет сделано автоматически сейчас же.

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

сотрудник класса: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.'. + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = employee ('aayushi', 'johari', 350000) emp_2 = employee ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Вывод-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Как вы можете видеть выше, я создал внутри класса метод под названием «полное имя». Таким образом, каждый метод внутри класса python автоматически принимает экземпляр в качестве первого аргумента. Теперь в этом методе я написал логику для вывода полного имени и возврата его вместо имени и фамилии emp_1. Затем я использовал «self», чтобы он работал со всеми экземплярами. Поэтому, чтобы печатать это каждый раз, мы используем метод .

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

сотрудник класса: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.'. + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05). ) emp_1 = сотрудник ('aayushi', 'johari', 350000) emp_2 = сотрудник ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Вывод-

350000 367500

Как вы можете видеть выше, я сначала напечатал зарплату, а затем прибавил 1,5%. Чтобы получить доступ к этим переменным класса, нам нужно получить к ним доступ через класс или экземпляр класса. Теперь давайте разберемся с различными атрибутами в классе Python.

Атрибуты в классе Python

Атрибуты в Python определяют свойство объекта, элемента или файла. Есть два типа атрибутов:

  • Встроенные атрибуты класса: Внутри классов Python присутствуют различные встроенные атрибуты. Например, _dict_, _doc_, _name _ и т. Д. Позвольте мне взять тот же пример, где я хочу просмотреть все пары ключ-значение employee1. Для этого вы можете просто написать приведенный ниже оператор, содержащий пространство имен класса:

    лучший java ide для linux
    печать (emp_1 .__ dict__)

    После его выполнения вы получите такой вывод: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ’email’: ‘aayushi.johari@company.com’}

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

Далее у нас есть общественный, охраняемый и частный атрибуты. Давайте разберемся с ними подробнее:

Именование Тип Смысл
имяОбщественныеЭти атрибуты можно свободно использовать внутри или вне определения класса.
_имяЗащищеноЗащищенные атрибуты не должны использоваться вне определения класса, если только внутри определения подкласса
__имяЧастныйТакой атрибут недоступен и невидим. Эти атрибуты невозможно ни прочитать, ни записать, кроме как внутри самого определения класса.


Затем давайте разберемся с наиболее важным компонентом класса Python, то есть с объектами.

Что такое объекты в классе Python?

Как мы уже говорили выше, объект может использоваться для доступа к различным атрибутам. Он используется для создания экземпляра класса. Экземпляр - это объект класса, созданный во время выполнения.

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

class MyClass: def func (self): print ('Hello') # создаем новый MyClass ob = MyClass () ob.func ()

Продвигаясь вперед с классом python, давайте разберемся с различными концепциями ООП.

Концепции ООП

ООП относится к объектно-ориентированному программированию в Python. Ну, Python не является полностью объектно-ориентированным, поскольку он содержит некоторые процедурные функции. Теперь вам должно быть интересно, в чем разница между процедурным и объектно-ориентированным программированием. Чтобы развеять ваши сомнения, при процедурном программировании весь код записывается в одну длинную процедуру, даже если она может содержать функции и подпрограммы. Этим невозможно управлять, поскольку и данные, и логика смешиваются вместе. Но когда мы говорим об объектно-ориентированном программировании, программа разбивается на автономные объекты или несколько мини-программ. Каждый объект представляет отдельную часть приложения, которая имеет свои собственные данные и логику для взаимодействия между собой. Например, на веб-сайте есть разные объекты, такие как изображения, видео и т. Д.
Объектно-ориентированное программирование включает в себя концепции класса Python, объекта, наследования, полиморфизма, абстракции и т. Д. Давайте разберемся с этими темами подробнее.

Класс Python: наследование

Наследование позволяет нам наследовать атрибуты и методы от базового / родительского класса. Это полезно, поскольку мы можем создавать подклассы и получать все функции от нашего родительского класса. Затем мы можем перезаписать и добавить новые функции, не затрагивая родительский класс. Давайте разберемся с концепцией родительского и дочернего классов на примере.

Как мы видим на изображении, дочерний элемент наследует свойства от отца. Точно так же в python есть два класса:

1. Родительский класс (Супер или Базовый класс)

2. Дочерний класс (подкласс или производный класс)

Класс, наследующий свойства, известен как Ребенок Класс, тогда как класс, свойства которого наследуются, известен как Родитель класс.

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

Давайте продолжим с классом python и поймем, чем полезно наследование.

Скажем, я хочу создать классы для типов сотрудников. Я создам «разработчиков» и «менеджеров» как подклассы, поскольку и разработчики, и менеджеры будут иметь имя, адрес электронной почты и зарплату, и все эти функции будут присутствовать в классе сотрудников. Итак, вместо того, чтобы копировать код для подклассов, мы можем просто повторно использовать код, унаследовав его от сотрудника.

сотрудник класса: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.'. + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) разработчик класса (сотрудник): передать emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Вывод - aayushi.johari@company.com

Как видно из вышеприведенных выходных данных, все сведения о классе сотрудников доступны в классе разработчика.Что делать, если я хочу изменить значение raise_amount для разработчика на 10%? давайте посмотрим, как это можно сделать практически.

сотрудник класса: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.'. + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) разработчик класса (сотрудник): raise_amount = 1.10 emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Вывод - 1,1

Как видите, обновлено процентное повышение зарплаты с 4% до 10%.Теперь, если я хочу добавить еще один атрибут, скажем, язык программирования в нашем методе инициализации, но его нет в нашем родительском классе. Есть ли решение для этого? Да! мы можем скопировать всю логику сотрудника и сделать это, но это снова увеличит размер кода. Чтобы этого избежать, давайте рассмотрим следующий код:

сотрудник класса: num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.'. + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) класс разработчик (сотрудник): raise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') печать (emp_1.prog_lang)

Поэтому с помощью небольшого количества кода я внес изменения. Я использовал super .__ init __ (first, last, pay), который наследует свойства от базового класса.В заключение, наследование используется для повторного использования кода и уменьшения сложности программы.

Класс Python: полиморфизм

Полиморфизм в компьютерных науках - это способность представлять один и тот же интерфейс для различных основных форм. На практике полиморфизм означает, что если класс B наследуется от класса A, ему не обязательно наследовать все, что есть в классе A, он может делать некоторые вещи, которые класс A делает по-другому. Чаще всего используется при наследовании. Python неявно полиморфен, он может перегружать стандартные операторы, чтобы они имели соответствующее поведение в зависимости от их контекста.

Давайте разберемся на примере:

class Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): print ('МЯУ!') c = Кот ('котенок') c.talk () d = Собака (Животное) d.talk ()

Вывод -

Мяу! Гав

Затем давайте перейдем к другой концепции объектно-ориентированного программирования, а именно к абстракции.

java что такое вектор

Класс Python: Абстракция

Абстракция используется для упрощения сложной реальности путем моделирования классов, соответствующих проблеме. Здесь у нас есть абстрактный класс, экземпляр которого невозможно создать. Это означает, что вы не можете создавать объекты или экземпляры для этих классов. Его можно использовать только для наследования определенных функций, которые вы называете базовым классом. Таким образом, вы можете наследовать функции, но в то же время вы не можете создать экземпляр этого конкретного класса. Давайте разберемся с концепцией абстрактного класса на примере ниже:

from abc import ABC, abstractmethod class Employee (ABC): @abstractmethod def calculate_salary (self, sal): pass class Developer (Employee): def calculate_salary (self, sal): finalsalary = sal * 1.10 return finalalalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Вывод-

11000,0

Как вы можете видеть в приведенном выше выводе, мы увеличили базовую зарплату до 10%, то есть зарплата теперь составляет 11000. Теперь, если вы действительно продолжите и создадите объект класса «Сотрудник», он выдаст вам ошибку, поскольку python этого не делает. не позволяют создавать объект абстрактного класса. Но, используя наследование, вы можете наследовать свойства и выполнять соответствующие задачи.

Итак, ребята, вкратце речь шла о классах и объектах Python. Мы рассмотрели все основы классов Python, объектов и различных объектно-ориентированных концепций в Python, так что вы можете начать практиковаться прямо сейчас. Я надеюсь, что вам понравилось читать этот блог о «Классе Python», и вы понимаете каждый аспект, который я обсуждал выше. После урока python я напишу больше блогов по Python для библиотеки и массива scikit learn. Быть в курсе!

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога «Python Class», и мы свяжемся с вами как можно скорее.

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