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

Способы достижения нескольких конструкторов в Python

Python предлагает некоторые альтернативные способы поддержки нескольких конструкторов. Некоторые из этих способов мы обсудим здесь на практике.

Автор оригинала: Team Python Pool.

Способы достижения нескольких конструкторов в Python

Привет программистам, сегодняшняя статья посвящена нескольким конструкторам в Python. Переход на python с любого другого языка программирования имеет все преимущества, за исключением случаев, когда речь идет о нескольких конструкторах. Python не поддерживает несколько конструкторов. Однако python предлагает некоторые альтернативные способы поддержки нескольких конструкторов. Мы обсудим некоторые из этих способов здесь. Но прежде позвольте мне кратко рассказать вам о том, что такое необходимость в нескольких конструкторах в программе.

Несколько конструкций помогут вам настроить свой класс в соответствии с его параметрами. При использовании разного количества параметров могут срабатывать разные конструкции. В отличие от других языков программирования, Python имеет другой способ обработки нескольких параметров. Мы подробно рассмотрим каждый из них.

Python Несколько Конструкторов И Его Необходимость:

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

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

Различные способы получить несколько конструкторов в Python:

  • Перегрузка конструктора на основе аргументов
  • <Методы, вызываемые из __init__
  • @classmethod decorator

Перегрузка конструктора Python на основе аргументов в виде нескольких конструкторов:

ПРИМЕР:

class eaxmple: 
  
    # constructor overloading 
    # based on args 
    def __init__(self, *args): 
  
        # if args are more than 1 
        # sum of args 
        if len(args) > 1: 
           
            for i in args: 
                self.answer 
  
        # if arg is an integer 
        # square the arg 
        elif isinstance(args[0], integer): 
           [0]*args[0] 
  
        # if arg is string 
        # Print with hello
        elif isinstance(args[0], str): 
           +args[0]+"."
  
  (1, 2, 3, 6, 8) 
print("Sum of list :", e1.answer) 
  (6) 
print("Square of integer :", e2.answer) 
  ("Programmers") 
print("String :", e3.answer)

ВЫХОД:

Sum of list : 20
Square of integer : 36
String : Hello! Programmers

ОБЪЯСНЕНИЕ:

В приведенном выше примере ответом является переменная экземпляра примера класса. Его значение различалось в разных экземплярах внутри класса на основе аргументов. Класс может иметь несколько аргументов. Поэтому *args определяется как кортеж, содержащий различные переданные ему аргументы. Аргументы доступны с помощью индекса. Например, как и в случае с целыми числами и строками, поскольку передается только один аргумент, доступ к нему осуществляется как к args[0]. В то время как для суммы доступ к более чем одному аргументу, переданному ей, осуществляется с помощью цикла.

Методы Python, вызывающие из __init__ как несколько конструкторов:

ПРИМЕР:

class equations: 
  
  # single constructor to call other methods 
    def __init__(self, *abc): 
  
        # when 2 arguments are passed 
        if len(abc): 
           .eq1(abc) 
  
        # when 3 arguments are passed 
        elif len(abc): 
           .eq2(abc) 
  
        # when more than 3 arguments are passed 
        else: 
           .eq3(abc) 
  
     def eq1(self, args): 
        x = (args[0]*args[0])+(args[1]*args[1]) 
        return y 

    def eq2(self, args): 
       [0]+args[1]-args[2] 
        return x 
  
    def eq3(self, args): 
       
        for i in range(0, len(args)): 
            temp[i]*args[i] 
          
       /5.0 
        
        return z 
  
  (4, 2) (4, 2, 3) (1, 2, 3, 4, 5) 
  
print("equation 1 :", abc1.ans) 
print("equation 2 :", abc2.ans) 
print("equation 3 :", abc3.ans)

ВЫХОД:

equation 1 : 12
equation 2 : 17
equation 3 : 11.0

ОБЪЯСНЕНИЕ:

В этом примере три уравнения, выполняемые в экземплярах класса: equaton1 –2 + b2 equation2 – + b – c. Уравнение 3 – z = сумма квадрата переданных аргументов/5.0.

уравнение 1 для двух аргументов. уравнение 2 – для трех, а уравнение 3-для более чем трех.

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

@classmethod decorator как несколько конструкторов:

ПРИМЕР:

class equations: 
  
    # basic constructor 
    def __init__(self, x): 
        

    @classmethod
    def eq1(obj, args): 
        
      # create an object for the class to return 
       ((args[0]*args[0])+(args[1]*args[1])
        return a 
 
    @classmethod
    def eq2(obj, args): 
       (args[0]+ args[1] - args[2]) 
        return b 
  
    @classmethod
    def eq3(obj, args): 
       
  
        # square of each element 
        for i in range(0, len(args)): 
            temp[i]*args[i] 
  
       /5.0 
       (temp) 
        return z 
  
  
li = [[4, 2], [4, 2, 3], [1, 2, 3, 4, 5]] 
  
# loop to get input three times 
while i < 3: 
  
   [i] 
  
    # 
    if len(input): 
       .eq1(input) 
        print("equation 1 :", p.ans) 
  
    # 
    elif len(input): 
       .eq1(input) 
        print("equation 2 :", p.ans) 
  
    # More than three arguments 
    else: 
       .eq3(input) 
        print("equation 3 :", p.ans) 
  
    #increment loop         
    i

ВЫХОД:

equation 1 : 12
equation 2 : 17
equation 3 : 11.0

ОБЪЯСНЕНИЕ:

Уравнения, выполняемые в приведенном выше примере: equaton1 –2 + b2. Уравнение 2 –+ b – c. Аналогично уравнению 3 – z = сумма квадрата переданных аргументов/5.0.

При передаче двух аргументов вычисляется уравнение 1. Для трех аргументов выполняется уравнение 2. И для более чем трех аргументов вычисляется уравнение 3.

Экземпляры изначально не создаются для вышеуказанного класса. Аналогично, методы классов определяются для оценки различных уравнений с помощью декоратора @classmethod. Поэтому теперь они называются именами классов. Кроме того, мы создаем объекты внутри самих методов класса после оценки href=”https://en.wikipedia.org/wiki/Dynamic_programming”>уравнения. Поэтому переменная экземпляра возвращает ответ. href=”https://en.wikipedia.org/wiki/Dynamic_programming”>уравнения. Поэтому переменная экземпляра возвращает ответ.

Надо Читать

  • Введение в Python Super С примерами
  • Функция справки Python
  • Почему Python sys.exit лучше других функций выхода?
  • Python Bitstring: Классы и другие примеры | Модуль

Вывод:

В заключение можно сказать, что сам Python не может поддерживать использование мультиконструкторов для класса. Он допускает различные альтернативы, рассмотренные выше. Однако перегрузка конструктора и __init__ definition влечет за собой определенные проблемы. Во-первых, нет четкого указания на то, что требуется при создании экземпляров класса. Кроме того, существуют различные комбинации инициализации нового экземпляра путем передачи аргументов. Таким образом, лучшая из трех приведенных альтернатив-это декорирование с помощью @classmethod decorators в качестве мультиконструкторов.

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

Счастливого Пифонирования!