Aprende Python · lección gratuita

Lección 26 · Métodos y self

Resumen

Un método es una función definida dentro de una clase que opera sobre los datos de un objeto. La diferencia clave con una función normal es su primer parámetro: self, que representa la propia instancia que llama al método. Gracias a self, un método puede leer y modificar los atributos del objeto, así como devolver valores calculados a partir de ellos. Cuando escribes objeto.metodo(), Python pasa automáticamente el objeto como self, por eso no lo escribes entre los paréntesis.

Conceptos

Hasta ahora viste atributos guardados en self dentro del constructor __init__. Los métodos son el siguiente paso: dan comportamiento a tus objetos. Mientras los atributos describen qué es un objeto (su estado), los métodos describen qué puede hacer. Todo método de instancia recibe automáticamente la instancia como primer argumento, que por convención llamamos self. A través de self el método "sabe" sobre qué objeto está trabajando.

Observa cómo se define y se usa un método. La llamada c.saludar() es equivalente, por debajo, a Persona.saludar(c): el objeto antes del punto se convierte en self.

class Persona:
    def __init__(self, nombre):
        self.nombre = nombre

    def saludar(self):              # self = la instancia
        return "Hola, soy " + self.nombre

c = Persona("Ana")
print(c.saludar())                 # Hola, soy Ana

Los métodos pueden recibir más parámetros además de self, pueden modificar el estado del objeto y pueden llamar a otros métodos del mismo objeto usando self.. Un método que cambia atributos suele no devolver nada (devuelve None); un método que calcula algo usa return. Diseña tus clases pensando en esa distinción: comandos que modifican vs. consultas que devuelven.

class Contador:
    def __init__(self):
        self.valor = 0

    def incrementar(self):         # modifica estado
        self.valor += 1

    def actual(self):              # devuelve estado
        return self.valor

Ejemplos

# 1) Método que usa un atributo y devuelve un valor
class Rectangulo:
    def __init__(self, ancho, alto):
        self.ancho = ancho
        self.alto = alto

    def area(self):
        return self.ancho * self.alto

r = Rectangulo(4, 3)
print(r.area())                    # 12

# 2) Método con parámetros extra además de self
class Cuenta:
    def __init__(self, saldo):
        self.saldo = saldo

    def depositar(self, monto):    # modifica el atributo
        self.saldo += monto

cuenta = Cuenta(100)
cuenta.depositar(50)
print(cuenta.saldo)                # 150

# 3) Un método que llama a otro método con self
class Circulo:
    def __init__(self, radio):
        self.radio = radio

    def area(self):
        return 3 * self.radio * self.radio   # pi simplificado a 3

    def describir(self):
        return "Area: " + str(self.area())

print(Circulo(2).describir())      # Area: 12
💡 Recuerda siempre escribir self como primer parámetro de los métodos de instancia. Si lo olvidas, Python lanzará un TypeError por número de argumentos, porque la instancia se pasa automáticamente.

Cheatsheet

AcciónSintaxisEjemplo
Definir métododef metodo(self):def saludar(self):
Método con parámetrosdef metodo(self, x):def sumar(self, x):
Leer atributoself.atributoself.nombre
Modificar atributoself.atributo = valorself.saldo += 10
Llamar a otro métodoself.metodo()self.area()
Devolver valorreturn ...return self.x * 2
Invocar métodoobjeto.metodo(args)r.area()

---

← Clases y objetosHerencia y super() →

Ver todas las lecciones de Aprende Python →