-
O metodos magicos são uma forma de adicionar uma "magia" para seu codigo. Esses metodos não são invocados diretamente por você, mas são usados internomente pelo python;
-
Por exemplo, em uma soma de dois numeros usamos o operador +, porém, internomente o método __ add __() é chamado. Veja o exemplo pratico, realizando uma soma da forma convencional:
>>> num = 10 >>> num + 5 15
-
O mesmo resultado é retornado se usarmos o método __ add __():
>>> num.__add__(5) 15
-
As classes padrões no python usam esses métodos magicos. Para visualizar esses métodos, use a função dir(), veja abaixo a lista de atributos e métodos magicos usados pela classe int:
>>> dir(int) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
Método magico | Quando é invocado (exemplo) | Explicação |
---|---|---|
__new__(cls [,...]) |
instancia = MinhaClasse(arg1, arg2) |
__new__ é chamado quando criamos um instancia. |
__init__(self [,...]) |
instancia = MinhaClasse(arg1, arg2) |
__init__ é chamado quando a instancia que criamos será inicializada. |
__cmp__(self, other) |
self == other , self > other , etc... |
Chamado quando vamos realizar qualquer compração. |
__pos__(self) |
+self |
Sinal de "mais". |
__neg__(self) |
-self |
Sinal de "menos". |
__invert__(self) |
~self |
Inversão de bits. |
__index__(self) |
x[self] |
Para ser chamado na conversão de tipo para um int quando o objeto é usado em uma slice expression. (explicado no final desse tópico). |
__bool__(self) |
bool(self) |
Retorna o valor booleano de um objeto. |
__getattr__(self, nome) |
self.nome # nome doesn't exist |
Você pode usar para dizer a uma classe como lidar com atributos que ela não gerencia explicitamente. |
__setattr__(self, nome, val) |
self.nome = val |
Definir um valor para um atributo. |
__delattr__(self, nome) |
del self.nome |
Deletar um atributo. |
__getattribute__(self, nome) |
self.nome |
Acessar qualquer atributo. |
__getitem__(self, key) |
self[key] |
Acessar qualquer item, usando um indice. |
__setitem__(self, key, val) |
self[key] = val |
Atribuir um valor a um item, por meio de um indice. |
__delitem__(self, key) |
del self[key] |
Deletar um item, por meio de um indice. |
__iter__(self) |
for x in self |
Interação |
__contains__(self, value) |
value in self , value not in self |
Usado para verificar se um item contém certo valor.in |
__call__(self [,...]) |
self(args) |
"Chamar" uma instancia de algo (variavel, função, etc...). |
__enter__(self) |
with self as x: |
with Gerenciador de contexto. |
__exit__(self, exc, val, trace) |
with self as x: |
with Gerenciador de contexto. |
__getstate__(self) |
pickle.dump(pkl_file, self) |
Serialização. |
__setstate__(self) |
data = pickle.load(pkl_file) |
Serialização. |
__slots__(self) |
__slots__ = 'foo', 'bar' |
permite que você indique explicitamente quais atributos de instância você espera que suas instâncias de objeto tenham. |
-
slice expression:
-
A função slice() retorna a fatia de um objeto;
-
Você pode usar essa função para separar uma sequencia de valores (uma lista, por exemplo).
-
Syntax:
slice(inicio, fim, intervalo)
Parametro Descrição inicio Opcional. Usando um numero inteiro, você poderá definir por onde o "corte" iniciará. O padrão 0 (zero). fim Usando um numero inteiro, você poderá definir por onde o "corte" terminará. intervalo Opcional. Um numero inteiro definirá o intervalo no qual a função irá percorrer. O padrão é 1 (Um).
-
-
gerenciadores de contexto:
-
Os gerenciadores de contexto permitem que você aloque e libere recursos precisamente quando desejar. O exemplo mais amplamente usado de gerenciadores de contexto é a instrução with. Por exemplo:
with open('arquivo.txt', 'w') as arq: arq.write('Olá, mundo!')
-