← Lumbre

Programación Orientada a Objetos · 2.º Atributos, métodos y self

Portada de Atributos, métodos y self

Atributos, métodos y self

✦ El parámetro self es la llave que hace que un método sepa a qué objeto pertenece · Programación Orientada a Objetos · Programación · en menos de 8 minutos

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

Objetivo: Explicar el rol de self como referencia a la instancia, y distinguir atributos y métodos de objeto frente a atributos y métodos de clase.

8 min Programación Orientada a Objetos · Programación 18–30 años
Más
Atributos, métodos y self

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Programación Orientada a Objetos · 2.º semestre Cursos Explorar Mi cuenta Salir del modo estudio

Atributos, métodos y self

Ilustracion de programacion orientada a objetos: jerarquia de clases con herencia y encapsulamiento.
Principios de la programacion orientada a objetos: clases, herencia y polimorfismo.

Mapa conceptual

  • Programacion OO
    • Clases
      • Objetos
      • Atributos
      • Metodos self
    • Encapsulamiento
      • Public
      • Private
      • Properties
    • Herencia
      • Polimorfismo
      • Abstractas
      • Interfaces
    • Composicion
      • Sobre herencia
      • Delegacion
      • Acoplamiento
    • Proyecto
      • Paquetes
      • Modulos
      • Convenciones

¿Qué es self?

En Python, self es el nombre por convención del primer parámetro de un método de instancia: representa AL objeto que invoca el método. Cuando llamas mi_perro.ladrar(), Python traduce eso a Perro.ladrar(mi_perro) y pasa el objeto como self. No es mágico, es azúcar de paso de argumento.

Acceder al estado

Dentro de un método, self.nombre lee el atributo de ese objeto concreto, y self.edad = 5 lo escribe. Sin self, no hay forma de distinguir el estado de un objeto del de otro de la misma clase.

__init__ y el constructor

El método __init__ se ejecuta al instanciar: inicializa los atributos del objeto nuevo. Su primer parámetro también es self; los demás son los argumentos con que creaste el objeto. Ahí se «siembra» el estado inicial de cada instancia.

Atributo de instancia vs de clase

  • De instancia: self.x, pertenece a cada objeto; un cambio no afecta a los demás.
  • De clase: definido en el cuerpo de la clase, compartido por todas las instancias salvo que una lo redefina. Útil para contadores globales o valores por defecto.
La diferencia self vs cls es la de objeto vs plantilla.
ElementoDónde viveAlcanceEjemplo
Atributo de instanciaen selfsolo ese objetoself.nombre
Atributo de claseen la clasecompartidoPerro.especie
Método de instanciarecibe selfopera sobre un objetodef ladrar(self)
Método de claserecibe clsopera sobre la clase@classmethod def contar(cls)

¿Qué representa self dentro de un método de instancia?

El precio de olvidar self

Un error clásico es escribir una variable dentro de un método sin self. entonces: nace una variable local que muere al terminar, no un atributo del objeto. Si quieres guardar algo en el objeto, debe vivir colgado de self.

Mutabilidad compartida

Cuidado con atributos de clase que son listas o diccionarios: todas las instancias comparten el MISMO objeto mutable, y modificarlo desde una lo cambia para todas. Es un bug elegante que atrapa a los principiantes.

mi_perro.ladrar() y Perro.ladrar(mi_perro) son equivalentes en Python.

Encadenar

Como los métodos reciben y pueden devolver el objeto, se pueden encadenar: p.set_nombre(A).set_edad(3). Devolver self permite esta fluidez. No es necesario, pero aparece en librerías de diseño de interfaces.

Errores frecuentes

  • Olvidar self como primer parámetro de un método de instancia.
  • Asignar un atributo nuevo fuera de __init__ de forma dispersa, dificultando leer el estado del objeto.
  • Confundir atributo de clase mutable compartido con atributo de instancia.

Asigna cada definición a su tipo:

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Video complementario
Recurso audiovisual para reforzar los conceptos.

Explica con tus palabras por qué hace falta self y qué pasaría si un método accediera a «nombre» sin self. Muestra un pequeño ejemplo donde la falta de self cause un bug.

Tu texto se guarda sólo en este dispositivo.

Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.
Más sobre esta lección
Explora temas relacionados

Conceptos

Comentarios

Inicia sesión para comentar.

Todavía no hay comentarios. Sé la primera persona en opinar.