Python – это объектно-ориентированный язык программирования (OOP), это очень популярное программирование парадигмы и является одним из наиболее эффективных подходов к написанию программного обеспечения.
Почти все в Python – это объект, со своими свойствами и методами. Поэтому при решении проблем реальных проблем вы создаете объекты на основе классов, которые также известны как зрелищность (экземпляры).
Класс определяется как чертеж или описание объекта, и он создан с классом ключевого слова.
Позвольте мне проиллюстрировать, как выглядит класс.
Создайте класс по имени торт, так что вы знаете о тортах, вы знаете, мы используем муку, чтобы сделать тесто и духовку, чтобы нагреть тесто. Итак, мы создаем атрибут по имени муку и духовку. Когда мы хотим выпечить торт, мы предприговариваем печь и смешайте нашу муку с другими ингредиентами, поэтому мы создаем метод, называемый Preheat_oven и Mix_dough.
class Cake: def __init__(self, flour, oven): """Initialize attributes.""" self.flour = flour self.oven = oven def preheat_oven(self): """create a method""" return f"Pre-heat {self.oven} to 350 degrees" def mix_dough(self): return f" Mix together {self.flour}, cocoa powder, baking powder"
Теперь, когда наш класс Cake создан, мы бы создадим объект (экземпляр) класса, называемого cont_cake.
pound_cake = Cake()
Здесь есть много, но не волнуйтесь, я сломаю это с постом.
1. Метод init ()
Все классы имеют функцию под названием init (), который всегда выполняется, когда мы создаем новый экземпляр в зависимости от класса, и он используется для назначения значений объекта свойства, как приведен выше, мы использовали init () Функция для назначения значений для духовки и муки. Всякий раз, когда мы хотим сделать экземпляр из класса Pizza, мы предоставим значения только для последних двух параметров муки и духовки.
2. Самометр
Определенные две переменные (духовка и мука) у каждого есть префикс я. i. Любая переменная, префиксированная с SAE, указывает, что переменная доступна для каждого метода в классе. II. Он используется для доступа к переменным, которые принадлежат классу.
3. Методы
Классы могут иметь методы, определенные для добавления функций. Методы являются функциями, которые принадлежат объекту. Помните, что все методы имеют себя как их первый параметр
def preheat_oven(self): pass
4. Доступ к атрибутам и методам вызова.
Чтобы получить доступ к атрибутам экземпляра, вы используете точечную обозначение. Мы создали экземпляр класса Pizza под названием CONT_CAKE, поэтому для доступа к муку атрибута мы выполняем следующее.
pound_cake = Cake("wheat flour","oven") print(pound_cake.flour)
wheat flour
После того, как мы создали экземпляр из классового торта, мы можем использовать точечную обозначение, чтобы вызвать любой метод, определенный в торте.
print(pound_cake.preheat_oven()) print (pound_cake.mix_dough()) #We can also create multiple instances too sponge_cake =Cake('pastry flour', 'Roaster oven') chiffon_cake = Cake ('whole wheat flour', 'Roaster oven') print(chiffon_cake.mix_dough())
Pre-heat oven to 350 degrees Mix together wheat flour, cocoa powder, baking powder Mix together whole wheat flour, cocoa powder, baking powder
5. Изменение значения атрибута через метод
Может быть полезно иметь методы, которые обновляют определенные атрибуты для вас. Вместо того, чтобы получить доступ к атрибуту напрямую, вы передаете новое значение для метода, который обрабатывает обновление внутренне.
Напишите класс, который позволяет пользователям выбрать свои любимые начинки для пиццы и любимые виды корочки из приложения для пиццы. Теперь магазин работает промо при заказе пиццы Margherita, вы можете заказать бесплатный напиток.
Измените атрибут напитка через метод order_margherita
class Pizza: def __init__(self, veggies, toppings, crust, oil): self.veggies = veggies self.toppings = toppings self.crust = crust self.oil = oil def order_margherita(self, drink): """modify attribute value here""" self.drink = drink return f"You ordered for {self.crust} pizza with the {self.veggies},{self.toppings},{self.oil} toppings and you have gotten a free {drink}" margherita_pizza = Pizza( "tomatoes", "mozzarella" ,"thick" ,"extra virgin olive oil.") print(margherita_pizza.order_margherita("coke"))
You ordered for thick pizza with the tomatoes, mozzarella, extra virgin olive oil. toppings and you have gotten a free coke.
6. Присвоение значения по умолчанию для атрибута
Когда вы назначаете значение атрибута по умолчанию, вам не нужно включать параметр для этого атрибута.
Все еще используя наш класс Pizza, позвольте мне назначить значение по умолчанию для атрибута мяса и дневника.
class Pizza: def __init__(self, veggies, toppings, crust, oil): self.veggies = veggies self.toppings = toppings self.crust = crust self.oil = oil self.meat = "beef" self.dairy = "cheese" def order_margherita(self, drink): """modify attribute value here""" self.drink = drink return f"You ordered for {self.crust} pizza with the {self.veggies},{self.toppings},{self.oil} toppings and you have gotten a free {drink}" def order_pepperoni(self): return f"You ordered {self.crust} pizza topped with {self.meat} and {self.dairy}" order_pepperoni = Pizza( "chilli","oregano," ,"thin" ,"extra virgin olive oil.") print(order_pepperoni.order_pepperoni())
You ordered thin pizza topped with beef and cheese
Наследование позволяет нам определять класс, который наследует все методы и свойства другого класса.
Родительский класс – это класс, наследуемый от, также называемый базовым классом. Детский класс – это класс, который наследует от другого класса.
Синтаксис выглядит так
class ChildClass(ParentClass): pass
Создайте детский класс с именем orderpizza, который наследует свойства и методы из класса Pizza
class OrderPizza(Pizza): pass order_pizza = OrderPizza( "chilli","oregano","thin" ,"soya bean oil.") #create an instance print(order_pizza.order_pepperoni()) #call a method
You ordered thin pizza topped with beef and cheese
Добавление метода init () и Super () в детский класс.
я. Когда вы добавляете init () Функция, детский класс больше не будет наследует родитель init () Функция, в порядке Чтобы сохранить наследство родителей init () Функция, добавьте вызов на родитель init () Функция:
class OrderPizza(Pizza): def __init__(self, veggies, toppings, crust, oil): Pizza.__init__(self, veggies, toppings, crust, oil) pizza = OrderPizza( "tomatoes", "oregano" ,"thin","extra virgin olive oil.") print(pizza.order_margherita("coca-cola"))
You ordered for thin pizza with the tomatoes, oregano, extra virgin olive oil. toppings and you have gotten a free coca-cola
II. Python также имеет функцию Super (), которая заставит детский класс наследует все методы и свойства со своего родителя.
class OrderPizza(Pizza): def __init__(self, veggies, toppings, crust, oil): super().__init__(veggies, toppings, crust, oil) pizza = OrderPizza( "tomatoes", "oregano" ,"thin","extra virgin olive oil.") print(pizza.order_margherita("coca-cola"))
You ordered for thin pizza with the tomatoes,oregano,extra virgin olive oil. toppings and you have gotten a free coca-cola
Добавление атрибутов и методов для детского класса
Давайте добавим атрибут, который позволяет пользователю выбрать тип доставки и метод, чтобы заказать их пиццу.
class OrderPizza(Pizza): def __init__(self, veggies, toppings, crust, oil): Pizza.__init__(self, veggies, toppings, crust, oil) self.delivery="Bike man" def ride_confirmation(self): return f"A {self.delivery} will deliver your pizza in twenty minutes" pizza = OrderPizza( "tomatoes", "oregano" ,"thin","soya oil") print(pizza.ride_confirmation())
A Bike man will deliver your pizza in twenty minutes
Класс и статические методы
Методы класса
То, что мы посмотрели до сих пор самосчет. Атрибуты и методы. @Classmethod Decorator – это функциональный декоратор, который создает экземпляр класса с использованием другого параметра (ы), чем те, которые обычно передаются в конструктор класса. я. Они обычно отмечены декоратором класса Method и принимают неявный первый аргумент (CLS) II. Это не возвращает экземпляр класса, а новый объект класса CLS.
Пример ниже, может быть, запуск пиццы хочет служить клиентам, которые смотрят их натриевое потребление.
class OrderPizza(Pizza): def __init__(self, veggies, toppings, crust, oil): Pizza.__init__(self, veggies, toppings, crust, oil) self.delivery="Bike man" def ride_confirmation(self): return f"A {self.delivery} will deliver your pizza in twenty minutes" @classmethod def healthier_food(cls, vegetable): return f"Make me a {vegetable} salad" order_salad = OrderPizza.healthier_food("parsley") print(order_salad)
Make me a parsley salad
Статические методы
Статические методы аналогичны методам классов, за исключением того, что они не получают неявный первый аргумент.
я. Они обычно отмечены StaticMethod Decorator II. Они ведут себя как простое функции, за исключением того, что вы можете позвонить им из экземпляра класса.
Пример ниже, возможно, магазин Pizza отсутствует из бекона, он предупреждает, что пользователь выбирает другой TOPPING.
class OrderPizza(Pizza): def __init__(self, veggies, toppings, crust, oil): Pizza.__init__(self, veggies, toppings, crust, oil) self.delivery="Bike man" def ride_confirmation(self): return f"A {self.delivery} will deliver your pizza in twenty minutes" @classmethod def healthier_food(cls, vegetable): return f"Make me a {vegetable} salad" @staticmethod def order_bacon_pizza(topping): if topping == "bacon": return f"we don't have bacon in the store now, please choose another" else: return f"your pizza with {topping} is ready" toppings = ["cabbage", "bacon","beef"] for topping in toppings: pizza = OrderPizza.order_bacon_pizza(topping) print(pizza)
your pizza with cabbage is ready we don't have bacon in the store now, please choose another your pizza with beef is ready
УРА! 🙌. 🎉 🎉 Мы почти закончили, давайте протестируем наш класс Pizza (вы можете проверить для детского класса позже). Ключ к разработке качественного программного обеспечения является проверка вашего кода, когда вы пишете его.
Создайте новый файл (test.py) и добавьте следующий код ниже.
import unittest from pizza import Pizza class TestPizza(unittest.TestCase): """Tests for the Pizza class""" def test_make_marinara(self): pizza = Pizza("tomatoes", "oregano", "thin", "coconut oil.") pizza = pizza.make_marinara() self.assertIn('oregano', pizza) self.assertEqual( 'You ordered for thin pizza with the following toppings tomatoes,oregano,coconut oil.', pizza) self.assertNotEqual("order a pizza", pizza) self.assertNotIn("cheese", pizza) def test_order_pepperoni(self): pizza = Pizza("tomatoes", "oregano", "thin", "coconut oil.") pizza = pizza.order_pepperoni() self.assertEqual('You ordered thin pizza topped with beef and cheese', pizza) self.assertNotEqual("order a pepperoni pizza", pizza) unittest.main()
.. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
Я действительно надеюсь, что вам понравилась статья, пожалуйста, не стесняйтесь поделиться своим мнением об этом, надеюсь, надеюсь воссоздать это в JavaScript.
использованная литература
- Курс пахота Python от Eric Mathes
- Сололерн
- W3school.
Давайте подклюжим Twitter |. Linkedin.
Оригинал: “https://dev.to/oluchi/a-gentle-introduction-to-python-classes-for-newbies-p46”