0Pricing
Python Academy · Aula

Métodos de instância e self

Escreva métodos que operem sobre os próprios dados do objeto.

Métodos de instância e self é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Introdução

Métodos de instância operam sobre os dados de um objeto específico, usando self para acessar e modificar seus atributos.

Definindo métodos de instância

def method(self): dentro de uma classe é um método de instância. Ele recebe o objeto como primeiro argumento (self).
class Circle:
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(5).area())

Chamando métodos

obj.method() é uma forma simplificada de ClassName.method(obj). Python passa obj como self automaticamente.
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

Métodos que retornam self

Retornar self permite encadear métodos: builder.set_name('x').set_age(3).build().
class Builder:
    def __init__(self): self.data = {}
    def set(self, k, v):
        self.data[k] = v
        return self
    def build(self): return self.data
result = Builder().set('x',1).set('y',2).build()
print(result)

Métodos privados (por convenção)

Use o prefixo _ para indicar uso interno. O prefixo __ aciona a alteração do nome: _ClassName__method.
class Account:
    def __init__(self, bal): self._bal = bal
    def _validate(self, amount): return amount > 0
    def deposit(self, amount):
        if self._validate(amount):
            self._bal += amount
a = Account(100)
a.deposit(50)
print(a._bal)

Propriedades como métodos

@property transforma um método em um atributo legível. Não são necessários parênteses ao acessá-lo.
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

Modificando o estado

Métodos que modificam atributos de self alteram o estado do objeto. Projete métodos com uma finalidade clara: consulta ou comando.
class Stack:
    def __init__(self): self.items = []
    def push(self, x): self.items.append(x)
    def pop(self): return self.items.pop()
    def peek(self): return self.items[-1]
s = Stack()
s.push(1); s.push(2)
print(s.pop(), s.peek())

Comparando objetos

Por padrão, == compara a identidade. Implemente __eq__ para comparar por valor.
class Point:
    def __init__(self, x, y): self.x,self.y=x,y
    def __eq__(self, other): return self.x==other.x and self.y==other.y
print(Point(1,2)==Point(1,2))

Protocolo de iteração

Implemente __iter__ e __next__ para tornar uma classe iterável — utilizável em laços for.
class Countdown:
    def __init__(self, n): self.n = n
    def __iter__(self): return self
    def __next__(self):
        if self.n <= 0: raise StopIteration
        self.n -= 1; return self.n + 1
print(list(Countdown(3)))

Protocolo de gerenciador de contexto

Implemente __enter__ e __exit__ para tornar uma classe utilizável em instruções with.
class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        import time
        print(f'elapsed: {time.time()-self.start:.3f}s')
with Timer(): pass

Método versus função

Quando acessado pela classe, Dog.bark é uma função comum. Por meio de uma instância, d.bark é um método vinculado — self já vem preenchido.
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

Verificação rápida

O que é encadeamento de métodos e o que um método deve retornar para dar suporte a ele?

Recapitulação

Métodos de instância: def m(self). Chame-os como obj.m(). Retorne self para permitir o encadeamento. __eq__/__iter__/__enter__/__exit__ implementam protocolos. O prefixo _ indica uso interno.

Continue

Excelente! Continue para a próxima lição para aprofundar seus conhecimentos.

Perguntas Frequentes

A aula “Métodos de instância e self” é grátis?

Sim — o texto completo de “Métodos de instância e self” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Métodos de instância e self”?

Escreva métodos que operem sobre os próprios dados do objeto. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Métodos de instância e self”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Classes e o método __init__
  2. Atributos de instância e de classe
  3. Métodos de instância e self
  4. Métodos mágicos: __str__ e __repr__
← Voltar para Python Academy