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

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

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

3. Что такое объекты?

4. Концепции ООП:

  • Наследование
  • Полиморфизм
  • Абстракция

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

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

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

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

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

class Class_name:
statement-1
. 
. 
statement-N

Здесь оператор «class» создает новое определение класса. Имя класса сразу следует за ключевым словом «class» в python, за которым следует двоеточие. Чтобы создать класс в python, рассмотрим следующий пример:

class employee:
pass
#no attributes and methods
emp_1=employee()
emp_2=employee()
#instance variable can be created manually
emp_1.first='aayushi'
emp_1.last='Johari'
emp_1.email='[email protected]'
emp_1.pay=10000
emp_2.first='test'
emp_2.last='abc'
emp_2.email='[email protected]'
emp_2.pay=10000
print(emp_1.email)
print(emp_2.email)

Вывод

[email protected]
[email protected]

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

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

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

class employee:
def __init__(self, first, last, sal):
self.fname=first
self.lname=last
self.sal=sal
self.email=first + '.' + last + '@company.com'
emp_1=employee('aayushi','johari',350000)
emp_2=employee('test','test',100000)
print(emp_1.email)
print(emp_2.email)

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

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

class employee:
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())

Вывод -

[email protected]
 [email protected]
 aayushijohari
 testtest

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

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

class employee:
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=employee('aayushi','johari',350000)
emp_2=employee('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. Для этого вы можете просто написать приведенный ниже оператор, который содержит пространство имен класса:

печать(emp_1.__dict__)

  • После его выполнения вы получите вывод, например: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘[email protected]’}
  • Атрибуты, определяемые пользователями: атрибуты создаются внутри определения класса. Мы можем динамически создавать новые атрибуты для существующих экземпляров класса. Атрибуты также могут быть привязаны к именам классов.

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

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

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

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

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

class MyClass:
def func(self):
print('Hello')
# create a new MyClass
ob = MyClass()
ob.func()

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

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

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

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

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

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

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

Класс, который наследует свойства, называется дочернимклассом, тогда как класс, чьи свойства унаследованы, называется родительским классом.

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

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

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

class employee:
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)
class developer(employee):
pass
emp_1=developer('aayushi', 'johari', 1000000)
print(emp_1.email)
Output - [email protected]

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

class employee:
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)
class developer(employee):
raise_amount = 1.10
emp_1=developer('aayushi', 'johari', 1000000)
print(emp_1.raise_amount)

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

class employee:
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)
class developer(employee):
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')
print(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('MEOW!')
c= Cat('kitty')
c.talk()
d=Dog(Animal)
d.talk()

Вывод -

Meow!
Woof

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

Класс 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  finalsalary
emp_1 = Developer()
print(emp_1.calculate_salary(10000))

Вывод -

11000.0

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

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

Если вы хотите прочитать больше статей о самых популярных на рынке технологиях, таких как искусственный интеллект, DevOps, этический взлом, вы можете обратиться к официальному сайту Edureka.

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

1. Классификатор машинного обучения в Python

2. Шпаргалка по Python Scikit-Learn

3. Средства машинного обучения

4. Библиотеки Python для науки о данных и машинного обучения

5. Чат-бот на Python

6. Коллекции Python

7. Модули Python

8. Навыки разработки Python

9. Вопросы и ответы на интервью с ООП

10. Резюме для разработчика Python

11. Исследовательский анализ данных в Python

12. Игра в змейку с модулем Python’s Turtle

13. Зарплата разработчиков Python

14. Анализ главных компонентов

15. Питон против С++

16. Учебник по скрейпингу

17. Питон SciPy

18. Метод регрессии наименьших квадратов

19. Памятка по Jupyter Notebook

20. Основы Python

21. Программы шаблонов Python

22. Парсинг веб-страниц с помощью Python

23. Декоратор Python

24. Среда разработки Python Spyder

25. Мобильные приложения с использованием Kivy в Python

26. 10 лучших книг для изучения и практики Python

27. Среда роботов с Python

28. Игра в змейку на Python с использованием PyGame

29. Вопросы и ответы из интервью с Джанго

30. 10 лучших приложений Python

31. Хеш-таблицы и хэш-карты в Python

32. Питон 3.8

33. Машина опорных векторов

34. Учебник по Python

Первоначально опубликовано на https://www.edureka.co 26 декабря 2017 г.