Sobrecarregar um construtor em Python

Hemank Mehtani 10 outubro 2023
  1. Usando vários argumentos para sobrecarregar construtores em Python
  2. Use os decoradores @classmethod para sobrecarregar um construtor em Python
Sobrecarregar um construtor em Python

Vários construtores ajudam a personalizar nossa classe personalizada de acordo com seus parâmetros. Ao usar parâmetros diferentes, podemos acionar construtores diferentes.

Vários construtores não são diretamente suportados no Python. Quando vários construtores são fornecidos na classe, o mais recente substitui o anterior. Mas existem algumas maneiras alternativas de sobrecarregar um construtor em Python.

Discutiremos esses métodos neste artigo.

Usando vários argumentos para sobrecarregar construtores em Python

A sobrecarga de funções refere-se a diferentes funções com o mesmo nome e diferentes tipos de parâmetros. Podemos sobrecarregar um construtor declarando várias condições, com cada condição baseada em um conjunto diferente de argumentos.

Por exemplo,

class delftstack:
    def __init__(self, *args):
        if isinstance(args[0], int):
            self.ans = args[0]
        elif isinstance(args[0], str):
            self.ans = "Hello from " + args[0]


s1 = delftstack(1)
print(s1.ans)

s2 = delftstack("Delft")
print(s2.ans)

Resultado:

1
Hello from Delft

No exemplo acima, temos dois tipos de parâmetros no construtor. Um é uma string e o outro é um número inteiro. A construção é sobrecarregada para fornecer a saída com base no tipo de argumentos fornecidos.

Também podemos sobrecarregar um construtor com base no número de argumentos fornecidos. Este método é semelhante ao exemplo anterior.

Veja o código abaixo.

class delftstack:
    def __init__(self, *args):
        if len(args) > 3:
            self.ans = "More than three"
        elif len(args) <= 3:
            self.ans = "Less than three"


s1 = delftstack(1, 2, 3, 4)
print(s1.ans)

s2 = delftstack(1, 2)
print(s2.ans)

Resultado:

More than three

Less than three

Use os decoradores @classmethod para sobrecarregar um construtor em Python

O decorador @classmethod permite que a função seja acessível sem instanciar uma classe. Esses métodos podem ser acessados ​​pela própria classe e por meio de suas instâncias. Quando usadas em sobrecarga, essas funções são chamadas de métodos de fábrica. Podemos usá-los para implementar o conceito de sobrecarga de construtor em Python.

Veja o código abaixo.

class delftstack(object):
    def __init__(self, a):
        self.ans = "a"

    @classmethod
    def first(cls):
        return "first"

    @classmethod
    def second(cls):
        return "second"


s1 = delftstack.first()

print(s1)

s2 = delftstack.second()

print(s2)

Resultado:

first

second

Este método é a maneira mais pitônica de sobrecarregar um construtor. No exemplo acima, o argumento cls do método de fábrica refere-se à própria classe.