Uso de self y *

 

self

En Python, dentro de una clase, self es la referencia a la instancia actual del objeto.

  • Sirve para acceder a los atributos y métodos del propio objeto.

  • No es una palabra reservada, podrías llamarlo de otra forma, pero por convención siempre se usa self.

Ejemplo simplificado:

class Perro:
    def __init__(self, nombre):
        self.nombre = nombre   # "self.nombre" pertenece al objeto

Cuando haces:

p = Perro("Firulais")
print(p.nombre)  # "Firulais"

En realidad internamente se está llamando:

Perro.__init__(p, "Firulais")

donde p es lo que se pasa como self.


El * en la definición del constructor

Cuando defines un método con un * solito en los argumentos:

def __init__(self, *, image_size, num_classes, image_paths, mask_paths=None, is_train=False):

significa que todos los argumentos que vienen después de * deben pasarse como argumentos con nombre (keyword arguments).
Esto obliga a que llames al constructor así:

dataset = CustomSegDataset(
    image_size=(256, 256),
    num_classes=3,
    image_paths=["img1.png", "img2.png"],
    mask_paths=["mask1.png", "mask2.png"],
    is_train=True
)

y no de esta forma:

dataset = CustomSegDataset((256, 256), 3, ["img1.png", "img2.png"])  # ❌ Error

👉 En resumen:

  • self = referencia a la instancia actual.

  • * = obliga a usar keyword arguments en vez de argumentos posicionales.


Comentarios