Рубрики
Без рубрики

Абстракция данных в Python – Просто объяснил

Типичные онлайн-поисковые запросы Значение абстракции данных в Python. Когда я начал изучать Python, ответы, которые я обнаружил, вызвал более путаницу, чем они решены. Сегодня я буду описать абстракцию данных четким способом, который поможет вам лучше понять концепцию. Затем мы применим эту концепцию в коде для … Абстракция данных в Python – просто объяснил Подробнее »

Автор оригинала: David Yeoman.

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

Сегодня я буду описать абстракцию данных четким способом, который поможет вам лучше понять концепцию. Затем мы применим эту концепцию в коде для понимания подчеркивания. Если вы не пришли к захвату Классы Python , Инкапсуляция и наследование , вы можете пожелать рассмотреть эти темы, прежде чем войти в мир абстракция Отказ

Когда вы проходите через статью, вы также можете посмотреть или слушать видео объяснения:

Что значит абстрактное?

Словарь определение слова абстрактное это «Существует как идея, чувства или качество, а не как материальный объект».

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

Когда мы говорим о противоположном аннотации, мы используем такие термины, как «бетон» , ссылаясь на то, что существует.

Так что такое абстракция в ориентации объекта?

Давайте предположим, что у нас есть теннисный мяч, футбол и мяч для гольфа. Это все материальные объекты, которые мы можем прикоснуться и использовать. Однако, если мы используем термин «мяч» Самостоятельно, это абстракция. Если я говорю о мяче, к чему я ссылаюсь? Разрушенный мяч, мяч для регби, шарик дискотека (показывая мой возраст здесь)? Тем не менее, когда я говорю с вами от мяча, есть общие концепции и правила, которые вы немедленно поймете. Это либо сферическое, либо, в случае мяча регби, удлиненный эллипсоид. Обычно используется либо для спорта, либо для достижения некоторой формы работы. Вы не имеете представления о размере, цвете, текстуре или материале изготовления. Вы не знаете его вес.

Следовательно, термин Ball – это абстракция, что дает вам понимание общей концепции, но не подробное понимание конкретного объекта. Термин бал не существует. Это существует только после того, как он станет чем-то ощутимым, таким как мяч для гольфа.

Как эта работа с данными?

Когда вы начинаете кодирование, вы поймете в общем смысле, что вы хотите достичь, но вы часто не знаете, что создаст множество пользователей объектов вашего кода.

В моих предыдущих статьях на классах Python мы использовали пример продуктового магазина базовой программы управления запасами. Такой пример красиво помогает объяснить абстракцию данных.

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

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

from abc import ABC, abstractmethod

class Stock(ABC): # Abstract class

    def __init__(self, stock_code, description, buy_price, mark_up, volume, manuf):
        self.code = stock_code
        self.desc = description
        self.buy = buy_price
        self.margin = mark_up
        self.volume = volume
        self.manuf = manuf
        super().__init__()

    def sell_price(self):
        print('Retail price = $', round(self.buy * self.margin, 2))

    @abstractmethod
    def sale(self):
        pass

    @abstractmethod
    def expiry(self):
        pass

Так что в коде выше, мы импортировали методы «ABC» и Абсфермета из модуля «ABC» Отказ Эти методы позволят нам создать наш абстрактный класс. Затем мы создали класс Сток Как вы обычно создаете какой-либо класс, хотя в этом случае мы называем метод ABC в скобках.

Затем мы определяем все атрибуты Мы чувствуем, что понадобится универсальный фондовый товар, используя __init __ () Функция, а затем создать стандартный метод, который рассчитает цену любого элемента акций при вызове.

Затем мы используем декоратор @abstractmethod Определить два абстрактных метода, один под названием продажа и другой срок действия. Эти методы возвращают нас к нашему первоначальному обсуждению абстракции. Мы знаем, что каждый подкласс, который мы генерируем, и большинство объектов мы создаем из этих подкласс, потребуются даты истечения срока действия и методы продаж. Однако мы не знаем, какие из них и какую форму они возьмут. Поэтому мы можем создать общую или абстрактную концепцию, которая будет завершена при создании объекта.

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

Позволь мне показать тебе.

from abc import ABC, abstractmethod

class Stock(ABC): # Abstract class

    def __init__(self, stock_code, description, buy_price, mark_up, volume, manuf):
        self.code = stock_code
        self.desc = description
        self.buy = buy_price
        self.margin = mark_up
        self.volume = volume
        self.manuf = manuf
        super().__init__()

    def sell_price(self):
        print('Retail price = $', round(self.buy * self.margin, 2))

    @abstractmethod
    def sale(self):
        pass

    @abstractmethod
    def expiry(self):
        pass

CannedPeas = Stock('C234', 'Canned Peas', 0.65, 1.457, '400mls', 'Edgells')

# Result
'''
Traceback (most recent call last):
  File "C:\Users\David\Desktop\abstraction.py", line 28, in 
    CannedPeas = Stock('C234', 'Canned Peas', 0.65, 1.457, '400mls', 'Edgells')
TypeError: Can't instantiate abstract class Stock with abstract methods expiry, sale
'''

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

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

from abc import ABC, abstractmethod
from datetime import datetime, timedelta

class Stock(ABC): # Abstract class

    def __init__(self, stock_code, description, buy_price, mark_up, volume, manuf):
        self.code = stock_code
        self.desc = description
        self.buy = buy_price
        self.margin = mark_up
        self.volume = volume
        self.manuf = manuf
        super().__init__()

    def sell_price(self):
        print('Retail price = $', round(self.buy * self.margin, 2))

    @abstractmethod
    def sale(self):
        pass

    @abstractmethod
    def expiry(self):
        pass

class Canned(Stock): # Concrete class
    category = 'Cans'

    def sale(self, num):
        print('Buy', num, 'cans of', self.desc, 'for the price of: $', round(self.buy * self.margin, 2), '\n')

    def expiry(self):
        pass

class Fruit(Stock):
    category = 'produce'

    def sale(self, discount):
        print('Buy 2', self.volume, 'of', self.desc, 'at the discounted price of $', round((self.buy * self.margin)*(1-discount),2))
        print('Normal retail price $', round(self.buy * self.margin, 2), '\n')

    def expiry(self, days):
        expirydate = datetime.today() + timedelta(days=days)
        print('Use by:', expirydate.day, expirydate.month, expirydate.year)

# Instantiate two objects - one from each sub-class
C465 = Canned('C465', 'Chicken Soup', 0.65, 1.468, '400mls', 'Campbells')

P987 = Fruit('P987', 'Golden Delicious Apples', 1.57, 1.58, 'bags', '')

C465.sale(3)

C465.sell_price()

print()

P987.sale(.25)

P987.expiry(14)

# Result
'''
Buy 3 cans of Chicken Soup for the price of: $ 0.95 

Retail price = $ 0.95

Buy 2 bags of Golden Delicious Apples at the discounted price of $ 1.86
Normal retail price $ 2.48 

Use by: 9 7 2021
'''

В приведенном выше коде я создал или создал два конкретных объекта, один из каждого класса. Затем я назвал методы « Продажа ‘и’ срок действия «Где применимо, и я также получил доступ к нормальному методу абстрактного класса« » Sell_price ‘. Обратите внимание, что мне нужно было импортировать datetime Модуль для выполнения расчета, используемого в фруктах срок действия метод.

Резюме

Сегодня мы узнали о абстракции данных в Python. Мы знаем, что термин абстрактный означает «Существует как идея, чувство или качество, а не как материальный объект». Затем мы говорили об абстракции, что-то, что дает вам широкие концепции без всех небольших конкретных деталей.

В нашем случае абстракции данных мы показали, как мы могли бы использовать модуль Python «ABC» Чтобы создать абстрактный класс акций для нашей программы управления запасами. Этот абстрактный класс содержит все эти общие атрибуты и методы, которые мы считаем основой продуктового товара, не зная особенности того, какие предметы будут проданы.

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

Мы также узнали, что вы не можете создать объект непосредственно из абстрактного класса, и что если абстрактный класс имеет абстрактные методы, эти методы должны быть реплицированы в подкладках; В противном случае ошибка приведет к ошибке.

Я доверяю, эта статья была полезна в вашем понимании. Спасибо за чтение.

Оригинал: “https://blog.finxter.com/data-abstraction-in-python-simply-explained/”