Автор оригинала: 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 в качестве мультиконструкторов.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!