После того, как 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 и науки о данных.
4. Библиотеки Python для науки о данных и машинного обучения
15. Питон против С++
17. Питон SciPy
20. Основы Python
23. Декоратор Python
32. Питон 3.8
Первоначально опубликовано на https://www.edureka.co 26 декабря 2017 г.