Упрощенный O.O.P : Абстракция в Python


Введение

В предыдущей статье «Упрощенно: Объектно-ориентированное программирование Python, я обещал подробно рассказать об абстракции. Предполагается, что вы хорошо владеете языком Python. Если вы только начинаете, начните здесь.

В этой статье мы подробно рассмотрим абстракцию в Python. Ниже приведен обзор этой статьи:

  • Определение и важность абстракции
  • Применение абстракции
  • Абстрактные классы и методы
  • Резюме

Определение абстракции

Прежде чем перейти к техническому определению абстракции, давайте сначала определим ее на более простом и понятном примере. Рассмотрим ваш пульт от телевизора, кнопку ‘+’, которая используется для увеличения громкости. Вы можете использовать кнопку, но не можете видеть, как выполняются операции. Это прекрасный пример абстракции.

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

Применение абстракции

Абстракция данных была полностью реализована во фреймворке Django (предполагается, что у вас есть базовый опыт работы с django).
При создании модели, возьмем пример модели Student:

from django import models

class student(models.Model):
   first_name= models.CharField(max_length=100, blank=True,null=True)
   last_name= models.CharField(max_length=100, blank=True,null=True)
   def __str__(self):
       return self.first_name + "" + self.last_name
Вход в полноэкранный режим Выход из полноэкранного режима

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

Абстрактные классы и методы

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

реализация
Чтобы объявить абстрактный класс, нам, прежде всего, необходимо импортировать модуль abc. Давайте рассмотрим пример.

from abc import ABC
class payment_class(ABC):
     #abstract methods goes below
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте реализуем полный абстрактный класс с методами

from abc import ABC
class payment_class(ABC):
     #abstract methods
    @abstractmethod 
    def send_money(self):
         pass
   @abstractmethod 
   def withdraw_money(self):
        pass

Вход в полноэкранный режим Выйти из полноэкранного режима

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

#Section 1
from abc import ABC,abstractmethod
class payment_class(ABC):
  def welcome_text(self,x):
    print(f'Welcome to {x}')
  #abstract methods
  @abstractmethod 
  def send_money(self):
    pass
  @abstractmethod 
  def withdraw_money(self):
    pass
#Section 2
# Create payment service 
class Terminal_pay(payment_class):
  def __init__(self,total,tax,amount,sendcharges,commission,balance=0):
    self.amount = amount
    self.sendcharges = sendcharges
    self.commission = commission
    self.tax = tax
    self.balance = balance
    self.total = self.tax + self.commission + self.amount + self.sendcharges
  def send_money(self):
    self.balance = self.balance - self.total
    print(f'Send USD. {self.amount} at USD. {self.sendcharges} commission charged USD.{self.commission} give USD. {self.total}.Your balance is USD. {self.balance}')
  def withdraw_money(self):
    self.balance = self.balance - self.total
    print(f'USD.{self.amount} withdrawn at {self.sendcharges} give {self.total}')

safariPay = Terminal_pay(total=0,tax=16,sendcharges=10,commission=10,amount=200)
safariPay.welcome_text("safariPay")
safariPay.send_money()

Вход в полноэкранный режим Выход из полноэкранного режима
Output:
Welcome to safariPay
Send USD. 200 at USD.10 commission charged USD.10 give USD.236.Your balance is USD.-236
Вход в полноэкранный режим Выход из полноэкранного режима

Пояснение

В этом примере (разделенном на два раздела), раздел 1 — это импорт ABC,abstractmethod из модуля abc, объявление абстрактного базового класса с общим методом, который имеет аргумент X, и абстрактные методы: send_money, withdraw_money.

В разделе 2 мы создаем платежный сервис, который наследуется от абстрактного базового класса payment_class. В классе payment_class мы создаем конструктор, а затем определяем методы: withdraw_money, send_money и, наконец, инстанцируем класс Terminal_class.

Следите за мной для дальнейшего обновления

Оцените статью
devanswers.ru
Добавить комментарий