Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Sobre a referência self

Olá! Estudando sobre o paradigma O.O. em Python, me veio a seguinte dúvida: sempre é necessário ter, nos métodos da classe, o parâmetro self? Em outras palavras: é possível, dentro do método da classe, fazer algo como

self.atributo = valor

sem ter o self como parêmetro no método em questão?

3 respostas

No Python, o self explícito é obrigatório.

E, na verdade, é uma convenção reforçada pelo PEP 8 - Style Guide for Python Code na seção que fala sobre argumentos de métodos de instância.

Vamos dizer que temos a classe Person abaixo:

>>> class Person(object):
            def set_name(person, name):
                if len(name) >= 2:
                    person.name = name

Repare que, ao invés de self, está person.

Você pode usar o método set_name normalmente!

>>> woman = Person()
>>> woman.set_name('Juliana')
>>> print(woman.name)
'Juliana'

A questão é que virou convenção usar self e é o que um pythonista espera!

Referência: https://wiki.python.org.br/SignificadoDoSelf

Olá! Muito obrigado pela resposta. No caso do seu código, person atuou exatamente como self, certo ? Como isso funcionou, já que self é uma palavra reservada? Deve-se ao fato de person ser o primeiro parâmetro do método em questão ?

solução!

Olá, Thiago!

O self não é uma palavra reservada!

Veja:

>>> self = 1
>>> print(self)
1

É isso mesmo que você falou. O próprio objeto sempre é passado como primeiro parâmetro em um método de instância.

Dá pra explorar o exemplo com o Python 3.6.1 aqui: https://repl.it/repls/GrandioseFaroffCurlew

E com o 2.7.10 aqui: https://repl.it/repls/BuoyantDisloyalDragon