A sobrecarga de funções em classes Python permite substituir o comportamento de um método com base em seus argumentos. Por exemplo, o método __setitem__ aceita dois argumentos, uma chave e um valor. Este método altera o valor de uma chave para o valor correspondente. Este comportamento viola o princípio fundamental da comutatividade. Se você quiser substituir um método, adicione o prefixo de sublinhado duplo ao nome do atributo.
Sobrecarregar funções em classes Python tem algumas vantagens. Primeiro, funções sobrecarregadas usam a implementação com a assinatura mais específica. Então, por exemplo, se você quiser encontrar a área de um quadrado, você usaria a função área. Você também usaria os parâmetros aeb para encontrar a área de um retângulo. Se você usar esses dois valores, poderá sobrecarregar ambos os métodos com segurança. No entanto, você não deve sobrecarregar funções com comportamento indefinido.
Herança em classes Python refere-se ao processo de passagem dos atributos e métodos de uma classe de uma classe filha para outra. A classe filha não é obrigada a reimplementar esses atributos e métodos para estender sua classe pai. Esse tipo de herança promove uma arquitetura mais combinável.
No entanto, a herança como estratégia de design tem uma desvantagem. A herança pode resultar na proliferação de classes. Um exemplo clássico desse problema é o módulo de registro do Python. À medida que os desenvolvedores precisaram enviar mensagens de log para novos destinos, a classe base de log ganhou gradualmente novas subclasses.
Existem dois tipos de herança em Python. Herança única é o tipo mais simples de herança, o que significa que uma classe filha herda de uma classe pai única. A classe filha recebe então acesso a todos os métodos e dados da classe pai.
Python possui um recurso poderoso chamado composição de classes, que é uma ótima maneira de criar classes dinâmicas. Você pode criar classes que contenham diversas instâncias de Component. Em seguida, você pode usar a palavra-chave ranges para especificar quantos de cada tipo devem existir. No entanto, você deve lembrar que a composição de classes é diferente de herança. A herança envolve a extensão de uma classe pai, enquanto a composição usa uma instância de uma classe base.
Apesar do Python suportar ambos os métodos, é melhor usar composição se você precisar modelar um relacionamento. Os benefícios desse recurso incluem a capacidade de reutilizar uma classe derivada para diferentes situações. Você também pode implementar múltiplas interfaces em uma única classe.
Variáveis ​​de instância de classe Python são variáveis ​​declaradas dentro de uma classe e não dentro de qualquer função individual. Essas variáveis ​​normalmente são declaradas em um método chamado __init__, onde recebem um único argumento: o objeto que está sendo instanciado. Além disso, eles também podem receber um ou mais argumentos para valores iniciais, e é aí que eles diferem de suas contrapartes em outras linguagens de programação.
Uma classe também pode conter atributos, que são valores exclusivos do objeto. Por exemplo, você pode usar o atributo ‘i’, que retorna uma string. Isso retornará um único número inteiro, ou um objeto de função, ou uma docstring, que retorna uma descrição de classe. Os atributos estão disponíveis apenas em objetos de instância, portanto você pode querer usá-los em combinação com outras variáveis, como métodos, para criar um objeto mais complexo.
O método __init__ de uma classe Python é usado para inicializar as variáveis ​​de uma classe. Outro método da classe imprime os valores de suas variáveis. Você pode usar este método para corrigir erros em seu código. Mas você deve entender seu uso. Discutiremos isso na próxima seção. Enquanto isso, vamos dar uma olhada em seus princípios básicos.
O método __init__ de uma classe Python é o método que define o conceito básico de uma classe. Este método usa os mesmos argumentos do construtor da classe. Você pode até alterar a ordem de chamada do método __init__. Por padrão, o construtor da classe pai será chamado primeiro. Alternativamente, você pode chamá-lo após o corpo do construtor da classe filha.