Conteúdo do Curso
Programação Orientada a Objetos em Python Avançado
Programação Orientada a Objetos em Python Avançado
eu mesmo
self
é o primeiro argumento em métodos, cujo nome é acordado entre programadores Python. Quando uma instância executa um método, ela automaticamente se passa como o primeiro argumento. Vamos considerar a classe User
que criamos anteriormente como um exemplo:
class User: def __init__(self, name, surname, age): # self=bob, name="Bob", surname="Smith", age=11 self.name = name # bob.name = "Bob" (name argument) self.surname = surname # bob.surname = "Smith" (surname argument) self.age = age # bob.age = 11 (age argument) bob = User("Bob", "Smith", 11) print(bob.name, bob.surname, bob.age)
O método mágico __init__
recebe os argumentos self
, name
, surname
e age
. No exemplo fornecido, quando criamos a instância bob
, esses argumentos são passados como valores.
Vamos usar a função print()
para examinar os argumentos passados:
class User: def __init__(self, name, surname, age): print("===== INIT ARGUMENTS =====") print("self:", self) print("name:", name) print("surname:", surname) print("age:", age) self.name = name self.surname = surname self.age = age bob = User("Bob", "Smith", 11) print("===== GLOBAL =====") print("bob:", bob) print("bob.name:", bob.name) print("bob.surname:", bob.surname) print("bob.age:", bob.age)
No exemplo dado, é evidente que a variável global bob
e o parâmetro self
dentro do método __init__
referem-se à mesma instância. Isso ilustra a convenção em Python em que métodos recebem a instância como o primeiro argumento, convencionalmente chamado self
.
Seguindo essa convenção, os métodos têm acesso aos atributos da instância e podem realizar operações ou acessar valores específicos para aquela instância em particular.
Nota
Em Python, o parâmetro
self
serve como o primeiro argumento nos métodos e representa o objeto da instância que chama o método. Por convenção, utiliza-se o nomeself
, embora qualquer nome de variável válido pudesse ser usado. Este parâmetro fornece acesso aos atributos e métodos da instância, permitindo que o método interaja com e manipule seus próprios dados.
Para uma melhor compreensão, vamos criar uma função regular e nomeá-la init
, a qual realizará as mesmas ações mas será chamada separadamente.
class User: pass def init(instance, arg1, arg2, arg3): instance.name = arg1 instance.surname = arg2 instance.age = arg3 bob = User() init(bob, "Bob", "Smith", 11) print(bob.name, bob.surname, bob.age)
A função init
recebe o primeiro argumento como uma instância e, em seguida, atribui os argumentos recebidos a ela. Da mesma forma, __init__
é utilizada ao criar uma classe, e self
é um elemento necessário para a criação de diferentes métodos, os quais discutiremos mais adiante.
Obrigado pelo seu feedback!