I'estou a aprender a linguagem de programação Python e I'deparei-me com algo que não compreendo.
Num método como:
def method(self, blah):
def __init__(?):
....
....
O que é que "ele próprio" faz? O que é que está destinado a ser? É obrigatório?
O que faz o método __init__
? Por que ele é necessário? (etc.)
Eu acho que eles podem ser construções OOP, mas eu não'não sei muito bem.
Neste código:
class A(object):
def __init__(self):
self.x = 'Hello'
def method_a(self, foo):
print self.x + ' ' + foo
... a variável self
representa a instância do próprio objeto. A maioria das linguagens orientadas ao objeto passam isso como parâmetro oculto para os métodos definidos em um objeto; Python não o faz. Você tem que declará-lo explicitamente. Quando você cria uma instância da classe A
e chama seus métodos, ela será passada automaticamente, como em ...
a = A() # We do not pass any argument to the __init__ method
a.method_a('Sailor!') # We only pass a single argument
O método __init__
é mais ou menos o que representa um construtor em Python. Quando você chama A()
Python cria um objeto para você, e o passa como o primeiro parâmetro para o método __init__
. Qualquer parâmetro adicional (por exemplo, A(24, 'Olá')
) também será passado como argumentos - neste caso causando uma exceção, já que o construtor não está esperando por eles.
Sim, tens razão, estas são construções de oop.
__init__
é o construtor de uma classe. O parâmetro self' refere-se à instância do objeto (como
this' em C++).
class Point:
def __init__(self, x, y):
self._x = x
self._y = y
O método __init__
é chamado quando a memória para o objeto é alocada:
x = Point(1,2)
É importante utilizar o parâmetro self
dentro do método de um objeto se você quiser persistir o valor com o objeto. Se, por exemplo, você implementar o método __init__
desta forma:
class Point:
def __init__(self, x, y):
_x = x
_y = y
Seus parâmetros x' e
y' seriam armazenados em variáveis na pilha e seriam descartados quando o método init saísse do escopo. Definir essas variáveis como self._x
e self._y
define essas variáveis como membros do objeto Point
(acessível durante o tempo de vida do objeto).
__init__
age como um construtor. Você precisará passar "self" para qualquer função de classe como o primeiro argumento se você quiser que elas se comportem como métodos não-estáticos. "self" são variáveis de instância para a sua classe.