Автор оригинала: David Yeoman.
В этой статье представлены классы в Python, объясняя, что они являются, их компоненты, и почему мы их используем. Мы также посмотрим на некоторые уникальные характеристики классов, чтобы помочь нам в создании чистого кода.
Когда я впервые начал кодировать, предмет классов в Python был для меня полной загадкой. Объяснения и Джаргон наняли затрудненные более сложными, не более доступными, а примеры использовались участвующие лай собаки, ускорения автомобилей, а также возраст людей и цвет волос. Это затруднило понять, почему и когда я бы использовал класс. В этой статье я дадим вам достаточно, чтобы понять основы классов, и мы будем использовать некоторые реальные примеры для иллюстрации обсуждаемых понятий.
Это серия из двух частей. Вы можете прочитать вторую часть этого представления Python здесь:
*** Введение в классы Python – наследование, инкапсуляция и полиморфизм ***
Объектно-ориентированное программирование (OOP) против процессуального программирования
Если вы похожи на меня, вы начали свое кодирование очень процедурным образом. Вы нарушили проблему, которую вы хотите решить на меньших шагах, возможно, использовал корзину, полную функции для решения отдельных частей этих шагов, передавал каждый шаг разных данных, которые им нужно для эксплуатации, то, наконец, сшивали все вместе в конце результат. Он работает, но это не так эффективно и не очень читаемо для тех, кто подойдет.
Используя объектно-ориентированное программирование, мы держим код и данные вместе и лечим проблему как серию объектов.
Объекты объяснили
В реальной жизни объект имеет свойства, специфичные для этого объекта; Он также имеет поведение или функции, которые он может выполнить. Возьмите картонную коробку; У него есть имя, размер, вес, материал и цвет. Он также имеет функцию складной квартиры и быть одним размером или собираться и быть другим.
Объекты Python ничем не отличаются. В Python свойства называются атрибуты и поведение называется Методы Отказ
Как отличаются классы в объектах?
Классы просто наброски или План, который определяет атрибуты и методы Одержимый объектами, созданными, используя этот класс. В реальном мире объем работы или планы дома делают то же самое. Давайте посмотрим на пример кодирования, чтобы попытаться объяснить это. Предположим, у нас есть небольшой продуктовый магазин и хотите написать программу управления запасами. Вот первый кусок кода.
class Stock: category = 'Grocery Item' def __init__(self, stock_code, description, buy_price, mark_up): self.code = stock_code self.desc = description self.buy = buy_price self.margin = mark_up
Когда вы определяете класс, он похож на запись функции; Вы используете def
ключевое слово . следуют название класса. Из первой строки кода мы определяем класс под названием Сток
Отказ Как и в случае с функциями, вам нужно добавить толстую кишку в конце определения. Следующие строки будут с отступом.
Следующая строка определяет переменную, называемую категория
и я прошел ценность «Продуктовые предметы»
как строка. Переменная категория
называется Переменная класса Отказ Если конкретно не изменилось, все объекты, созданные под классом Сток
будет иметь категорию «Бакуляционные предметы
‘.
💡 Примечание : В Python, для некоторой странной причины, а не используя слово «Create», мы используем слово «мнение». Значит означает «обеспечить экземпляр чего-либо». Экземпляр – «случай чего-то возникновения. Поэтому, в то время как обычные люди разговаривают о создании объекта из класса «Складские кодеры», разговаривают о «инстанцировании экземпляра акций класса». Странно да? Используйте любые слова, которые вы хотите иметь смысл, но вы поймете, когда люди используют термины отныне.
Тогда вы видите следующий код:
def __init__(self, stock_code, description, buy_price, mark_up):
Как это отступ, вы поймете, что это определение сидит в классе. Определяет, что называется атрибутами класса. Как пример нашей картонной коробке ранее, атрибуты класса определяют специфические характеристики объектов, созданных в этом классе.
В этом примере каждый объект, созданный под этим классом, будет иметь характеристики, stock_code, описание, buy_price и mark_up. Критическая вещь, которую нужно помнить, состоит в том, что значения этих характеристик будут отличаться для каждого объекта. Мы создадим эти значения, когда определяем каждый объект. Вы увидите это в ближайшее время.
Что такое __init__ и самостоятельный синтаксис, используемый в классе?
Чтобы понять больше, чем вам когда-либо нужно знать о __init__
Функция, Смотрите эту статью Отказ Вкратце __init __ ()
Является ли функция Python, которая инициализирует или наборы, атрибуты, которые вы хотите обладать своим объектами. Термин Self – это просто заполнитель для объекта, который вы создаете из этого класса, и он позволяет получить доступ к переменным из этого класса. Вам не нужно использовать себя, вы можете поставить любое имя, которое вам нравится; Это просто то, что я является принятым использованием.
Другие предметы после себя в __init__
Функция – это параметры, которые вам нужно будет перейти к классу, когда вы хотите создать объект. В этом примере они Stock_Code
, Описание
, buy_price
и Mark_up
Отказ Если вы не поставляете эти параметры при создании объекта из этого класса, вы получите Типеррор
Отказ
Установка классных атрибутов
self.code = stock_code self.desc = description self.buy = buy_price self.margin = mark_up
Эти утверждения в рамках функции инициализации создают новые атрибуты, называемые Код
, Desc
, Купить
и маржа
и пропустите их параметры, поставляемые при создании объекта.
Таким образом, мы закончили создание нашего класса на данный момент. Мы обсудим другие вещи, которые мы можем сделать в скором времени, но сначала давайте создадим объект.
Создание нашего первого объекта из вновь определенного класса
Чтобы создать объект из класса, вы предоставляете имя для объекта и передаваем к нему класс и параметры, применимые к объекту, которое вы хотите создать. В нашем примере я назову свой товар с его акционером, а затем пройти класс и параметры, необходимые классом к этому имени. Вот код.
class Stock: category = 'Grocery Item' def __init__(self, stock_code, description, buy_price, mark_up): self.code = stock_code self.desc = description self.buy = buy_price self.margin = mark_up # Create, or 'instantiate' an object of class Stock C298 = Stock('C298', 'Chicken Soup', 0.75, 1.553)
С этой последней строкой кода мы дали имя C298 для объекта, который мы хотим создавать. Тогда мы назвали классом Сток
и передан в правильном порядке удельных значений параметров, которые мы создали под __init__
Отказ Мы игнорируем самого параметра, так как теперь будет автоматически стать именем объектов. Когда мы запустим этот код, будет создан новый объект, C298. Значения атрибута будут доступны как часть этого объекта. Давайте проверим это.
print(C298.category) print(C298.desc) print(C298.buy) print(C298.margin) print(C298.code, '\n') print('In the {} category we have {} at a cost price of ${}.'.format(C298.category, C298.desc, C298.buy)) # Result Grocery Item Chicken Soup 0.75 1.553 C298 In the Grocery Item category we have Chicken Soup at a cost price of $0.75.
Первая команда печати вызовов для классной переменной «Категория» и возвращает «продуктовый продукт». Остальные команды просят каждое значение атрибута, которое было предоставлено, когда мы создали объект.
Использование методов в определении класса
Ранее мы объяснили, что объекты имеют свойства, называемые атрибутами в Python, а поведение называются методами. Мы видели, как мы создаем атрибуты и пропускать значения для них. Теперь мы обсудим методы.
Я думаю о методах как как функции, которые мы используем в повседневной кодировке, за исключением того, что мы называем их методами, когда они внутри класса. Мы определяем их именно так же; Преимущество использования их в классе состоит в том, что у них есть доступ и может изменить, атрибуты и переменные в этом классе.
Как и функции, методы могут не требовать аргументов, или им может понадобиться ряд. Давайте посмотрим на обоих.
class Stock: category = 'Groceries' def __init__(self, stock_code, description, buy_price, mark_up): self.code = stock_code self.desc = description self.buy = buy_price self.margin = mark_up def sell_price(self): print('Retail price = $', round(self.buy * self.margin, 2)) def sale(self, discount): print('The discounted price of {} is $'.format(C298.desc), round(self.buy * self.margin * (1-discount), 2)) C298 = Stock('C298', 'Chicken Soup', 0.75, 1.553) C298.sell_price() C298.sale(.15)
В этом примере я определил два метода. Первый, Sell_price ()
, создает метод, который рассчитывает цену продажи для объекта, используя цену покупки и умножить ее на маржу. Этот метод не имеет никаких аргументов, и поэтому никаких параметров необходимо пропустить при вызове, отсюда и C298.Sell_price ()
синтаксис.
Второй метод, Продажа ()
, рассчитывает цену продаж на основе дисконтной фигуры. Поэтому он предусматривает аргумент под названием «Скидка». Когда мы называем метод, мы должны дать скидку или получить ошибку. С помощью этого кода я передал его скидку на 15%. Давайте запустим код.
# Result Retail price = $ 1.16 The discounted price of Chicken Soup is $ 0.99
Мы можем создать столько продуктовых объектов, поскольку мы желаем использовать класс Сток
; Каждый объект будет уникальным, но обладает соответствующими характеристиками класса.
Надеюсь, с этим примером вы можете увидеть значение использования классов. Они позволяют нам придерживаться сухого принципа в Python; Не повторяйте себя. Нам нужно позвонить в класс и передавать значения, и у нас есть новый объект без большого количества повторяющихся кодирования.
Резюме
В этой статье мы представили основы классов в Python. Мы обсудили формирование планшета, изложении переменных, атрибутов и методов для применения к любому объекту, которое мы создаем, используя этот класс.
Мы создали класс фонда и определили переменные и атрибуты, мы пожелали ему применить к любым созданным объектам. Затем мы создали объект, используя этот класс и применяя определенные значения для атрибутов классов. Затем мы допросили объект, чтобы увидеть, что он содержит эти значения.
Наконец, мы ввели методы, которые могут получить доступ, использовать и изменить атрибуты в классе. Мы создали метод для расчета цены продажи продуктов продуктов и второго метода для расчета цены продаж с использованием прилагаемой скидки.
В первой части этой статьи мы построим на этом примере для обсуждения наследования, инкапсуляции и полиморфизма:
*** Введение в классы Python – наследование, инкапсуляция и полиморфизм ***