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

Введение в объективное ориентированное программирование (OOP) с использованием Python

Объектно-ориентированное программирование (OOP) – это парадигма программирования, которая обеспечивает способы структурирования … Помечено с Python, классы, объект, объектом заданнопрограммирование.

Объектно-ориентированное программирование (OOP) Это парадигма программирования, которая обеспечивает способы структурирования программ, так что свойства и поведение сгруппированы на отдельные объекты.

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

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

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

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

Почему мы должны использовать объектно-ориентированные программирование (OOP)?

Разработчики часто выбирают использовать Объектно-ориентированное программирование (OOP) В своих программах Python, потому что он делает код более многоразовым и облегчает работу с большим программами. Такие программы помогают разработчику избежать повторяющихся кода, потому что класс может быть определен один раз и повторно использован много раз.

Python – это Объектно-ориентированное программирование (OOP) Язык, который является очень популярным способом создания программного обеспечения. В отличие от процессуальных программиров, где основным акцентом является функциями функций, объектно-ориентированное программирование подчеркивает объекты.

С OOP вы можете сделать вашу программу гораздо более организованной, масштабируемыми, многоразовыми и расширяемыми. Однако концепция Объектно-ориентированное программирование (OOP) может показаться немного странно для некоторых разработчиков. Может быть трудно понять, но я уверяю вас, что это без сомнения, очень мощная концепция.

Давайте немного поговорим о некоторых элементах, которые составляют сущность Объектно-ориентированное программирование (OOP).

Как мы определим классы с Python?

Так же, как определения функций начинаются с ключевого слова DEF в Python, определения класса начинаются с ключевого слова класса.

Первая строка внутри класса называется DOCSTRING и имеет краткое описание о классе. Хотя не обязательно, настоятельно рекомендуется ставить его в документацию по причинам в целом, но не беспокоиться о том, что ничего не происходит, если вы не ставите его, это всего наилучшим образом.

Вот простое определение класса, ничего неожиданно, что-то простое уже с DOCSTRING включено, чтобы вы могли видеть, как он добавляется в наш код.

class NicaraguanTypicalMeals:
''' This is the  NicaraguanTypicalMeals class '''
pass

Класс создает новое локальное пространство имен, где определены все его атрибуты. Атрибуты могут быть данными или функциями.

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

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

Пример классов, которые также включают в себя метод, который будет использоваться для приветствия Python Dev, было бы нечто вроде предложенного в следующем фрагменте:

class PythonDev:
    ''' This is the docstrings for the PythonDev class '''

    def __init__(self, age=18, nationality="Nicaraguense"):
        self.age = age
        self.nationality = nationality

    def greet(self):
        print(f"Nationality: {self.nationality}.")
        print(f"Current age: {self.age} years old.")

# First, we create the instance of this class
pythonDev01 = PythonDev(39)

# Let's use the methods of this object
pythonDev01.greet()

# Create another instance passing both parameters now
pythonDev02 = PythonDev(20, "Costarricense")
pythonDev02.greet()

# We can also access your methods individually
print(f"Nationality: {pythonDev01.nationality}")
print(f"Current Age: {pythonDev01.age}")

Классы против экземпляров

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

class Dog:
    def __init__(self, name, age, breed):
        self.name = name
        self.age = age
        self.breed = breed

# Now let's instantiate by creating two objects of this class
chele = Dog("Chele", 4, "Belgian Tervuren")
kiki = Dog("Kiki", 2, "Doberman Pinscher")

# Let's see then what these Dog instances contain:

# Chele is a 4 years old Belgian Tervuren.
print(f"{chele.name} is a {chele.age} years old {chele.breed}.")

# Kiki is a 2 years old Doberman Pinscher.
print(f"{kiki.name} is a {kiki.age} years old {kiki.breed}.")

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

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

Другими словами, класс как форма или викторина. Экземпляр похож на форму, которая была заполнена информацией. Так же, как многие люди могут завершить одну и ту же форму со своей уникальной информацией, многие экземпляры могут быть созданы из одного класса, вы понимаете меня, Bambi?

Что такое объекты в Python?

В Python разработчики могут определять объекты. Объект представляет собой сборник методов и переменных, которые живут где-то в памяти компьютера. Эти объекты могут быть манипулированы во время выполнения.

В OOP объект является экземпляром класса. Как я уже говорил, класс похож на план, в то время как экземпляр является копией класса с реальными значениями. Объекты состоят из следующих элементов:

  • Состояние: он представлен атрибутами объекта. Это также отражает свойства объекта.
  • Поведение: он представлен методами объекта. Он также отражает ответ объекта к другим объектам.
  • Идентичность: дает объект уникальным именем и позволяет объекту взаимодействовать с другими объектами.

Объявления объектов (также называется созданием класса)

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

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

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

В Python достаточно всего несколько строк кода, чтобы сделать это:

class NicaraguanTypicalMeals:
    ''' This is the NicaraguanTypicalMeals Class '''

 # Declare the class attributes with their respective values
    breakfast = "Nacatamal o Tamuga de Masatepe"
    lunch = "Sopa de Mondongo Masatepina"
    dinner = "GalloPinto con Queso Frito y Tajadas Maduras"

# We now create the instance of this class
dish = NicaraguanTypicalMeals()

# Let's see what the created object owns as
# the primary inheritance of the class
print(f"Breakfast: {dish.breakfast}.")
print(f"Lunch: {dish.lunch}.")
print(f"Dinner: {dish.dinner}.")

Как мы видим, класс – это модель для этого Никарагуантипичныемины объект, который мы только что построили. Мы можем думать о классе как эскиз (прототип) дома. Содержит все детали о этажах, дверях, окнах и т. Д. На основании этих описаний мы строим дом. Дом – это объект.

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

Создание объекта в Python

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

PythonZealot01 = PythonZealot()

Это создаст новый экземпляр объекта под названием Pythonzealot01 Отказ Мы можем получить доступ к атрибутам объектов, используя префикс имени объекта.

Атрибуты могут быть данными или методами. Методы объекта являются соответствующими функциями этого класса. Это означает, что поскольку pythonzealot01.sayhello – это функциональный объект (или атрибут класса) тогда Pythonzealot01.sayhello будет объектом метода.

class PythonZealot:
    ''' This is the docstrings for the PythonZealot class '''

   # Declare the class attributes with their respective values
    job_title = "Python Developer"

    def sayHello(self):
        print(f"Hi guys: I am a {self.job_title}.")

# First, create an instance of this class
PythonZealot01 = PythonZealot()

# Use the object methods now
PythonZealot01.sayHello()

Использование свойств, Getter и Benters в классе

В Python Getter и Setters не такие, как на других объектно-ориентированных языках программирования. В основном, основным назначением использования GetTers и Getters в объектных ориентированных программах является обеспечение инкапсуляции данных. Частные переменные в Python не на самом деле скрытые поля, такие как на других объектно-ориентированных языках. Как правило, Getter и Setters в Python часто используются, когда:

  • Нам нужно добавить логику проверки, чтобы получить и установить значение.
  • Чтобы избежать прямого доступа к классу поле, то есть частные переменные не могут быть напрямую доступны или изменены внешним пользователем. Но что такое добыча и сеттер, короче? Давайте посмотрим тогда, как мы можем определить каждый из этих методов теоретически говоря:

Геттерс: Это методы, используемые в объектно-ориентированном программировании (OOP), которые помогают получить доступ к частным атрибутам класса.

Соседниты: Это методы, используемые в объектно-ориентированном программировании (OOP), которые помогают установить значение частных атрибутов в классе.

Частные атрибуты и инкапсуляция в объектах

Давайте теперь посмотрим, как мы сможем быстро перейти к реализации атрибута частного класса с помощью Python для этого:

class Developer:
    ''' This is the Developer Class '''

    def __init__(self, name, age):
        # declare attributes or properties as private
        self.__name = name
        self.__age = age


    # getter method to get the properties using an object
    def get_name(self):
        return self.__name

    # setter method to change the value 'name' using an object
    def set_name(self, name):
        self.__name = name

В этом примере мы ясно видим, что у класса Developer есть три метода.

_ init _ : – Используется для инициализации атрибутов или свойств класса.

__На: Это частный атрибут.

get_name: Он используется для получения значений имени частного атрибута.

SET_NAME: используется для установки значения имени с использованием объекта класса.

Вы не можете получить доступ к частным переменным прямо в Python. Вот почему вы реализовали метод Getter.

Все еще путают о функциональности класса? Позвольте мне кратко объяснить это и не беспокойтесь, если вы не понимаете все, потому что это займет некоторое время, чтобы насладиться его, но оно того стоит сделать, мой дорогой читатель.

class Developer:
    ''' This is the Developer Class '''
    def __init__(self, name):
        # declare attributes or properties as private
        self.__name = name

    # getter method to get the properties using an object
    def get_name(self):
        return self.__name

    # setter method to change the value 'name' using an object
    def set_name(self, name):
        self.__name = name

# --------------- Implementation -------------------

# Creating an object based on the WebDeveloper class
objWebDev = WebDeveloper("Alvison Hunter")

# Get the value of 'name' using the get_name() method
print(f"Name: {objWebDev.get_name()}")

# Set a new value for 'name' attribute using set_name() method
objWebDev.set_name("Alvison Lucas Hunter Arnuero")

# Let's see the results now
print(f"Name: {objWebDev.get_name()}")

Вот как вы реализуете частные атрибуты, полученные и сеттели в Python. Давайте напишем ту же реализацию, но в Питоновый путь Отказ

В Питоновый путь , No Getters или Setters Method не требуется для доступа или изменения атрибутов. Вы можете получить доступ к нему напрямую, используя имя атрибутов.

Вы говорите мне, что питоновый путь еще проще, не пользуюсь тем, чтобы использовать Getter и Benters? Хм … не совсем, мой дорогой коллега. Давайте посмотрим на это следующий пример, чтобы уточнить этот вопрос.

class PythonicWay:
''' This is the PythonicWay class '''

    def __init__(self, url):
        self.url = url

# Create an object or instance for the PythonicWay class
obj2 = PythonicWay("https://alvisonhunter.com/")

# Let's see the results now, fellows
print(f"Developer Website: {obj2.url}")

В чем разница между двумя классами, упомянутыми выше?

Разработчик скрывает частные атрибуты и методы. Он реализует функцию инкапсуляции, которая типична для объектно-ориентированного программирования (OOP).

Напротив, Pythonicway Класс не скрывает данные. Он не реализует никаких объектных ориентированных функций программирования (OOP) функций инкапсуляции.

Какой самый рекомендуемый способ использовать в этом случае сценария для любого современного разработчика?

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

Когда мы собираемся поговорить о @Property Decorator?

Мы сделаем это прямо сейчас: что, если вы хотите иметь некоторые условия, чтобы установить значение атрибута в классе Developer?

Допустим, если значение, которое мы пройдем для атрибута имени, равно строке «Alvisis Hunter», мы можем установить его в атрибут; В противном случае установите значение по умолчанию US непосредственно в этот метод.

Давайте реализуем это, изменив метод set_name () в разработчике. Давайте рассмотрим класс для этого, создав объект, и после того, как у нас есть экземпляр, мы постараемся сделать это изменение.

class Developer:
    ''' This is the docstring for the Developer class '''

    def __init__(self, name, age):
        # Declare attributes or properties as private
        self.__name = name
        self.__age = age

    # getter method to get the properties using an object
    def get_name(self):
        return self.__name

    # setter method to change the value 'name' using an object
    def set_name(self, name):
        self.__name = name

   # getter method to get the age property of the objec
    def get_age(self):
        return self.__age

    # Add the option to set the age property only if the
# parameter sent is a positive number and not a string
    def set_age(self, age):

        # Expected condition to see if the parameter is a valid integer
        if not isinstance(age, int):
            print("You entered an invalid age. Setting value to default.")
            self.__age = 18
        else:
            self.__age = age

# --------------- Implementation -------------------
# Create an object based on the Developer class
obj = Developer("Alvison Hunter", 40)

# Get the value of 'name' using the get_name() method
print(f"Name: {obj.get_name()}")

# Get the value of 'age' using the get_age() method
print(f"Age: {obj.get_age()}")

# set a new value for 'name' attribute using set_name()
obj.set_name("Alvison Lucas Hunter Arnuero")

# set a new value for the 'age' attribute with the set_age() method
obj.set_age("35")

# Let's see the results now for both cases
print(f"Name: {obj.get_name()} | Age: {obj.get_age()}")

Все выглядит хорошо, это работает правильно, однако существует более подходящий способ сделать это. Давайте посмотрим, как реализовать вышеупомянутый класс с помощью декоратора @Property.

ЗАМЕТКА: Я напишу о декораторах в классах в будущих статьях, но сейчас мы рассмотрим декоратор недвижимости. Если вы хотите больше информации о декораторах, я приглашаю вас на Смотреть это видео Там, где это объясняется простым способом, как использовать их с Python.

class Property:
    def __init__(self, language):
        # Starting the attribute
        self.language = language

    @property
    def language(self):
        return self.__language

    # The attribute & method name must be the same as
#the one used to set the attribute value
    @language.setter
    def language(self, language):
        if language.title() == "Python":
            self.__language = language.title()
        else:
            self.__language = "Use Python, dude!"

obj3 = Property("JavaScript")
print(obj3.language)

В этом примере мы видим, что @Property используется для получения значения частного атрибута без использования домой. Важно отметить, что мы должны поставить линию @property перед методом, в котором мы возвращаем частную переменную.

Чтобы установить значение частной переменной, мы используем форму @ method_name.setter Перед методом. Мы должны использовать его как наш сеттер.

@ language.setter установит значение языка, проверив условия, которые мы упоминали в методе. Другим способом использования свойства выглядит следующим образом:

class PropertyAlternative:


    def __init__(self, new_lang):
        # call set_lang() to set the value 'lang'
        # checking certain conditions first
        self.__set_lang(new_lang)

    # getter method to get the properties using an object
    def __get_lang(self):
        return self.__lang

    # setter method to change the 'lang' value using an object
    def __set_lang(self, new_lang):

        # condition to check if new_lang is appropriate or not
        if new_lang.title() == "Python":
            self.__lang = new_lang
        else:
            self.__lang = "Get Pythonized, young lad!"


    #Pass the getter & setter methods to property() method
    # Let's assign the result to a variable as class attribute
    language = property(__get_lang, __set_lang)

# create a new object of the PropertyAlternative class
obj4 = PropertyAlternative("Java")
print(f"Lenguaje: {obj4.language}")

В этом примере мы видим, что все методы Getter и Setter передаются в метод свойств, а затем результат назначается переменной, которая должна использоваться в качестве атрибута класса, который в этом случае мы называем языком.

Следует отметить, что методы сеттера и получения должны быть частными, чтобы скрыть их, как показано в примере.

Резюме

Ну, я думаю, нам уже удалось немного покрыть о Объектно-ориентированное программирование И нам также удалось реализовать инкапсуляцию в Python в основном способе, и в то же время мы простым образом упилили разницу между использованием Setter, Getter и декоратором свойств, когда мы создаем наши классы.

Стоит отметить, что большинство современных языков программирования, такие как Java, C # и C ++, среди прочего, следуйте принципам Объектно-ориентированное программирование (ООП) Так что то, что упоминается здесь, также будет, в какой-то степени, применимо к некоторым из них, независимо от того, где вы в настоящее время идут в отношении вашей карьеры или все, что ваш предпочтительный язык программирования.

ЗАМЕТКА: Наше YouTube Channel Всегда на вашем обслуживании, коллегам! Если вы начинаете с Python или JavaScript, или если вам просто нравится веб-программирование в целом, я рекомендую вам взглянуть на мой канал YouTube, где я делимся советами на этих языках, а также многие примеры с кодом, включенным в комплект, который мы делимся в Путь свободно помочь вам на этом прекрасном пути разработки программного обеспечения.

❤️. Если вам понравилось эту статью, которая мотивирует писать больше! 🦄 Если вы действительно считаете, что эта статья помогла вам полностью! 🔖 Если вам нужно проверить эту статью позже. 🤔 Пожалуйста, оставьте свой комментарий, ваше мнение очень важно.

Увидимся в следующий раз, друзья! Не забудьте поделиться Этот пост среди всех ваших друзей!

Оригинал: “https://dev.to/allwissendjager/introduction-to-object-oriented-programming-oop-3d1e”