Sobrecarga de operador em Python
Sobrecarga do operador significa dar significado estendido além de seu significado operacional predefinido. Por exemplo, operador + é usado para adicionar dois inteiros, bem como juntar duas strings e mesclar duas listas. É possível porque o operador '+' está sobrecarregado pela classe int e pela classe str. Você deve ter notado que o mesmo operador ou função embutida mostra comportamento diferente para objetos de classes diferentes, isso é chamado de sobrecarga de operador .
(
1
+
2
)
(
"Geeks"
+
"For"
)
(
3
*
4
)
(
"Geeks"
*
4
)
Resultado:
3 GeeksFor 12 GeeksGeeksGeeksGeeks
Como sobrecarregar os operadores em Python?
Considere que temos dois objetos que são uma representação física de uma classe (tipo de dados definido pelo usuário) e temos que adicionar dois objetos com o operador binário '+' que gera um erro, porque o compilador não sabe como adicionar dois objetos . Portanto, definimos um método para um operador e esse processo é chamado de sobrecarga de operador. Podemos sobrecarregar todos os operadores existentes, mas não podemos criar um novo operador. Para realizar a sobrecarga do operador, o Python fornece alguma função especial ou função mágica que é automaticamente invocada quando associada a esse operador específico. Por exemplo, quando usamos o operador +, o método mágico __add__ é automaticamente invocado, no qual a operação do operador + é definida.
Sobrecarregando operador binário + em Python:
Quando usamos um operador em tipos de dados definidos pelo usuário, automaticamente uma função especial ou função mágica associada a esse operador é chamada. Mudar o comportamento do operador é tão simples quanto mudar o comportamento do método ou função. Você define métodos em sua classe e os operadores funcionam de acordo com o comportamento definido nos métodos. Quando usamos o operador +, o método mágico __add__ é automaticamente invocado, no qual a operação do operador + é definida. Ao alterar o código desse método mágico, podemos dar um significado extra ao operador +.
Código 1:
class
A:
def
__init__(
self
, a):
self
.a
=
a
def
__add__(
self
, o):
return
self
.a
+
o.a
ob1
=
A(
1
)
ob2
=
A(
2
)
ob3
=
A(
"Geeks"
)
ob4
=
A(
"For"
)
(ob1
+
ob2)
(ob3
+
ob4)
Resultado :
3 GeeksFor
Código 2:
class
complex
:
def
__init__(
self
, a, b):
self
.a
=
a
self
.b
=
b
def
__add__(
self
, other):
return
self
.a
+
other.a,
self
.b
+
other.b
def
__str__(
self
):
return
self
.a,
self
.b
Ob1
=
complex
(
1
,
2
)
Ob2
=
complex
(
2
,
3
)
Ob3
=
Ob1
+
Ob2
(Ob3)
Resultado :
(3, 5)
Sobrecarregando operadores de comparação em Python:
class
A:
def
__init__(
self
, a):
self
.a
=
a
def
__gt__(
self
, other):
if
(
self
.a>other.a):
return
True
else
:
return
False
ob1
=
A(
2
)
ob2
=
A(
3
)
if
(ob1>ob2):
(
"ob1 is greater than ob2"
)
else
:
(
"ob2 is greater than ob1"
)
Resultado :
ob2 é maior que ob1
Sobrecarregando a igualdade e menos que os operadores:
class
A:
def
__init__(
self
, a):
self
.a
=
a
def
__lt__(
self
, other):
if
(
self
.a<other.a):
return
"ob1 is lessthan ob2"
else
:
return
"ob2 is less than ob1"
def
__eq__(
self
, other):
if
(
self
.a
=
=
other.a):
return
"Both are equal"
else
:
return
"Not equal"
ob1
=
A(
2
)
ob2
=
A(
3
)
(ob1 < ob2)
ob3
=
A(
4
)
ob4
=
A(
4
)
(ob1
=
=
ob2)
Resultado :
ob1 é menor que ob2 Não igual
Métodos mágicos Python ou funções especiais para sobrecarga de operador
Operadores binários :
Operador | Método Mágico |
---|---|
+ | __add __ (próprio, outro) |
- | __sub __ (próprio, outro) |
* | __mul __ (próprio, outro) |
/ | __truediv __ (próprio, outro) |
// | __floordiv __ (próprio, outro) |
% | __mod __ (próprio, outro) |
** | __pow __ (self, other) |
>> | __rshift __ (próprio, outro) |
<< | __lshift __ (próprio, outro) |
E | __and __ (self, other) |
| | __ou __ (próprio, outro) |
^ | __xor __ (próprio, outro) |
Operadores de comparação:
Operador | Método Mágico |
---|---|
< | __LT __ (AUTO, OUTRO) |
> | __GT __ (AUTO, OUTRO) |
<= | __LE __ (AUTO, OUTRO) |
> = | __GE __ (AUTO, OUTRO) |
== | __EQ __ (SELF, OUTRO) |
! = | __NE __ (AUTO, OUTRO) |
Operadores de atribuição:
Operador | Método Mágico |
---|---|
- = | __ISUB __ (AUTO, OUTRO) |
+ = | __IADD __ (AUTO, OUTRO) |
* = | __IMUL __ (AUTO, OUTRO) |
/ = | __IDIV __ (AUTO, OUTRO) |
// = | __IFLOORDIV __ (AUTO, OUTRO) |
% = | __IMOD __ (AUTO, OUTRO) |
** = | __IPOW __ (SELF, OUTRO) |
>> = | __IRSHIFT __ (AUTO, OUTRO) |
<< = | __ILSHIFT __ (AUTO, OUTRO) |
& = | __IAND __ (AUTO, OUTRO) |
| = | __IOR __ (AUTO, OUTRO) |
^ = | __IXOR __ (AUTO, OUTRO) |
Operadores unários:
Operador | Método Mágico |
---|---|
- | __NEG __ (SELF, OUTRO) |
+ | __POS __ (AUTO, OUTRO) |
~ | __INVERT __ (AUTO, OUTRO) |
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva