O “eu mesmo” em python: self
19th June 2008
As pessoas que não são tão acostumadas com a programação orientada a objetos em python, as vezes me perguntam: Por que utilizar aquele “self” antes de qualquer parâmetro em um método? Pois bem! Vou tentar responder esta pergunta tão comum e com alguns exemplos notáveis.
Primeiramente vamos definir uma classe chamada “Pessoa” e atribuir um método a ela para dar o nome a uma pessoa:
class Pessoa(object):
def set_nome(self, nome)
if nome.istitle():
self.nome = nome
else:
print “Nomes próprios possuem a primeira letra maiúscula :)”
Muito bem! Eu defini uma restrição dentro no “if” para testarmos se o nome passado como parâmetro têm a primeira letra maiúcula. Para esta classe, nós instanciamos um objeto que é usado posteriormente para acessar o método dentro da classe, assim, utilizamos o objeto seguido do nome do método dessa forma:
ciclano = Pessoa()
ciclano.set_nome(”Rodrigo”)
print ciclano.nome #Vai imprimir ‘Rodrigo’
Até aí tude bem! Mas e o self? O self é o nome do objeto a ser invocado pelo método, em outras palavras, quando fazemos ciclano.set_nome(”Rodrigo”), estamos dizendo que o método set_nome chamado pertence a classe instanciada para o objeto ciclano.
Outra forma de utilizar esta mesma classe é a seguinte:
ciclano = Pessoa()
Pessoa.set_nome(ciclano, “Rodrigo”)
print ciclano.nome #Vai imprimir ‘Rodrigo’
Perceberam a diferença? Agora eu tive que passar o objeto na qual o método set_nome pertence como primeiro parâmetro do próprio método!
Não é necessário que o primeiro parâmetro seja exatamente “self”, nos podemos dar qualquer nome a ele, mas como é interessante que tudo seja padronizado e que o nome self está nas normas de padronização PEP-8, então não iremos discutir.
Algumas linguagens utilizam o self implicitamente, mas por que em python ele é definido explicitamente? Eu achei algumas definições:
- O self explícito faz parte do “espírito da linguagem”, como diz o Zen of Python: Explícito é melhor do que implícito;
- A declaração explícita já virou costume entre os programadores em python;
- Maior flexibilidade na chamada de métodos.
Se alguêm tiver mais um por favor comente
Existem outras razões relacionadas a herança simples e múltipla na linguagem que poderei falar na próxima. Até logo!
Posted in Python | 4 Comments »






