Atributos, métodos y self

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
- Clases
¿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.
| Elemento | Dónde vive | Alcance | Ejemplo |
|---|---|---|---|
| Atributo de instancia | en self | solo ese objeto | self.nombre |
| Atributo de clase | en la clase | compartido | Perro.especie |
| Método de instancia | recibe self | opera sobre un objeto | def ladrar(self) |
| Método de clase | recibe cls | opera 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.
Documentación de PythonEl tutorial oficial sobre clases y el papel de self.
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.
Python: ClassesTutorial oficial de clases en Python 3.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.