Rodrigo Hübner

Computação e|é Diversão





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!

4 Responses to “O “eu mesmo” em python: self”

  1. Renato Says:

    Aeee Hubão…
    Interessante o post, dá pra ver que a orientação à objetos tem alguns recursos bem diferentes das outras linguagens.

    falowww

  2. Vinícius Souza Says:

    Ô Hubão, que if mais feio nome.upper()[0] se ainda fosse nome[0].upper() onde fica o Zen of Python? :D

    Vamos usar os recursos da linguagem né!!
    Faz apenas: if nome.istitle()
    hehehe

    Abraço!

  3. rodrigo Says:

    Hehe! Apesar de “exibidinho” vou aceitar a sua dica Vinicius…
    Não conhecia o método… muito bem!
    até mais!

  4. Vinícius Souza Says:

    Exibidinho nada, se você considerar que Nome seja o nome completo, Vinicius souza vai da ok no seu if, com istitle não!
    Mas blz, o teu post é sobre o self ahehaheahha

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>