Sobrecarga do operador em python

Sobrecarga do operador em python
A sobrecarga corresponde à tendência de um método ou operador de agir de várias maneiras no sentido de programação, com base nos parâmetros fornecidos à técnica ou aos operandos nos quais o operador opera. A sobrecarga do operador significa que o significado prolongado é dado acima de seu significado funcional predefinido. Os operadores de Python funcionam para classes internas, mas para vários tipos, o mesmo operador age de maneira diferente. Veremos como podemos fazer sobrecarga do operador em Python neste guia.

Por exemplo, o operador + pode adicionar dois números matematicamente, combinar duas listas ou concatenar strings. Aqui está um programa Python simples para mostrar um vislumbre do operador + usado para adição e concatenação.

Bem, o que vem se usarmos esses operadores para objetos em um usuário definido aula? Vamos fazer o seguinte programa que tenta simular um ponto no esquema de dimensões em 2-D. Abaixo, você já pode ver isso porque Python não entendeu como ingressar em 2 casas de coordenadas, um Erro de tipo é gerado.

Podemos realizar essa tarefa em Python por meio da sobrecarga do operador, mas antes de tudo, vamos entender os métodos especiais.

Métodos mágicos especiais

Métodos de classe começando com o sublinhado duplo são classificados em Python como métodos especiais ou funções mágicas. As funções usadas para realizar atividades específicas. Os métodos usuais que descrevemos para uma classe não são essas funções. Um deles seria o __iniciar_() função que mencionamos acima. Sempre que construímos um novo objeto nessa classe, é chamado. Iremos tornar as funções compatíveis com a classe para embutidas via funções mágicas. Em Python, existem várias outras funções especiais.

Operadores binários ou matemáticos

Aqui estão os detalhes das funções mágicas para sobrecarregar os operadores binários ou matemáticos do Python.

Operadores relacionais ou de comparação

Abaixo estão os detalhes das funções mágicas para sobrecarregar a comparação Python ou operadores relacionais.

Operadores de atribuição

Aqui estão os detalhes de algumas funções mágicas para sobrecarregar os operadores de atribuição no código Python.

Agora, é hora de vislumbrar alguns códigos de amostra quando usamos os métodos mágicos mencionados acima e sobrecarregar determinados operadores.

Sobrecarregar os operadores binários ou matemáticos

Exemplo 01: Operador de adição
Você terá que fazer cumprir o __adicionar_() método na classe para sobrecarregar o + operador. Grande dever chega com grande força. Dentro deste método, você pode fazer o que quiser. Mas é muito mais racional devolver o 'Coordenar ' objeto da soma de coordenada.

Quando você experimentou C1 + C2, Python realmente chama sua mágica .__Add __ () Método como C1.__Add __ (c2) ou coord.__Add __ (C1, C2).

Exemplo 02: Operador de multiplicação
Da mesma forma, você pode até sobrecarregar vários operadores binários usando funções mágicas. No mesmo exemplo acima, enquanto sobrecarrega o operador de multiplicação, obtemos 2, 6 Como nossa resposta para a função mágica.

Exemplo 03: Operador de subtração
Usando o operador de subtração, temos -1, -1 como nossa resposta.

Exemplo 04: Operador de energia
Nós sobrecarregamos o poder operador ao usar a função mágica de potência; obtemos 1, 8.

Exemplo 05: Operador de módulo
Sobrecarregando o operador do módulo, usamos o __mod__ Função mágica para obter o módulo.

Você também pode usar os outros operadores matemáticos, e.g., Divisão e operador da divisão de piso, para sobrecarga.

Sobrecarregar os operadores de comparação

Python não restringe a sobrecarga de operadores a apenas operadores binários ou aritméticos. Também somos capazes de sobrecarregar os operadores de comparação.

Exemplo 01: Menos que Operador
Suponha que precisamos de menos do que o '<' symbol na nossa 'Coordenar ' classe a ser implementada. Vamos comparar o valor desses argumentos da fonte e produzir a resposta. Como sempre, pode ser aplicado. Temos três objetos e estamos comparando -os em declarações impressas. Como resultado, obteremos esse objeto C1 é menos que C2, Então, ele é produz Verdadeiro. Por outro lado, C2 e C1 são mais excelente que C3; É por isso que ambos falam saída.

Exemplo 02: Não é igual ao operador
Agora sobrecarregando o Não igual (!=) Operador de comparação, você receberá Verdadeiro No caso da primeira e segunda declaração de impressão, porque satisfaz a condição de que ambos os objetos não são iguais. Por outro lado, o objeto 1 produz o mesmo que o objeto 3, que não atende ao requisito de não ser igual. É por isso que a terceira instrução impressa sai Falso como resultado.

Exemplo 03: maior ou igual ao operador
Vamos tentar o mesmo exemplo para sobrecarregar o maior ou igual para o operador. No caso da primeira declaração de impressão, temos 2> = 13, qual é Não é verdade; É por isso que produz falso. Na segunda e terceira declarações de impressão, temos 13> = 2 e 2> = 2, respectivamente. Ambos são Verdadeiro como eles satisfazem a condição de maior ou igual a.

Experimente os outros operadores de comparação, e.g., mais significativo que, igual a 'menor ou igual a' em seu código também.

Sobrecarregar os operadores de atribuição

Dê uma olhada em um exemplo de sobrecarga do operador de atribuição. Estamos tomando um exemplo semelhante com a sobrecarga do '-=' operador de atribuição. Definimos dois objetos com valores de coordenadas y e z. Primeiro objeto C1 está passando seus valores para 'auto.você e 'auto.z ' variáveis, respectivamente. Por outro lado, o objeto C2 está passando seus valores para 'outro.você e 'outro.z '.

Objeto C1 tem valores de auto.y = 1 e auto.z = 1 agora mesmo. O objeto C2 valores 'outro.y = -2 ' e 'outro.z = -3 ' foi passado para subtraído do objeto C1 valores. Como resultado, os resultados C1 - C2 auto.y - outro.y = 1-(-2) e auto.z - outro.z = 1-(-3). O resultado calculado, que é 3 e 4, foi salvo em 'eu.x 'e' eu.z 'devido ao operador de atribuição de' =.'Na impressão, este código produzirá o resultado do objeto C1, que possui duas variáveis auto.y = 3 e auto.z = 4.

Conclusão

Tentamos cobrir todos os operadores em seu código para uma melhor compreensão da sobrecarga do operador.