Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 1 de 425/36 en el curso~14 min
Lecciones del módulo (1/4)

Clases e instancias

Una clase es una plantilla para crear objetos que contienen datos (atributos) y comportamiento (métodos). Una instancia es un objeto concreto creado a partir de la clase.

Sintaxis mínima

Python
class Cane:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def abbaia(self):
        return f"{self.nome} dice WOOF!"

# creación de instancias
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

fido.nome       # 'Fido'
fido.abbaia()   # 'Fido dice WOOF!'

__init__: el "constructor"

El método __init__ se llama automáticamente al crear una instancia (Cane("Fido", 3)). Se utiliza para inicializar los atributos.

Técnicamente no es un constructor (el objeto ya ha sido creado por __new__), pero es el lugar donde se establece el estado inicial.

self: el primer parámetro

self es la referencia a la instancia sobre la que se llamó al método. Es una convención (no una palabra clave) y siempre es el primer parámetro de los métodos de instancia.

Python
fido.abbaia()
# equivalente a Cane.abbaia(fido)
# Python pasa fido como self automáticamente

Atributos de instancia frente a atributos de clase

Python
class Cane:
    specie = "Canis familiaris"   # atributo de CLASE (compartido)

    def __init__(self, nome):
        self.nome = nome           # atributo de INSTANCIA (para cada uno)

fido = Cane("Fido")
luna = Cane("Luna")

fido.nome       # 'Fido'        (instancia)
luna.nome       # 'Luna'        (instancia)
fido.specie     # 'Canis familiaris'  (buscado en la clase)
Cane.specie     # 'Canis familiaris'

Múltiples métodos y estado

Python
class Contatore:
    def __init__(self, inizio=0):
        self.valore = inizio

    def incrementa(self, di=1):
        self.valore += di

    def reset(self):
        self.valore = 0

c = Contatore()
c.incrementa()
c.incrementa(di=5)
c.valore       # 6
c.reset()
c.valore       # 0

Pruébalo tú

Ejercicio#python.m7.l1.e1
Intentos: 0Cargando...

Define una clase `Point` con __init__(self, x, y) que guarde los atributos. Añade un método `distance_from_origin` que devuelva la raíz cuadrada de x^2 + y^2. Crea `p = Point(3, 4)` y evalúa `p.distance_from_origin()`.

Cargando editor...
Mostrar pista

math.sqrt(self.x ** 2 + self.y ** 2)

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m7.l1.e2
Intentos: 0Cargando...

Define `BankAccount` con __init__(self, balance=0) y los métodos `deposit(amount)`, `withdraw(amount)` que modifiquen self.balance. Crea `a = BankAccount(100)`, deposita 50, retira 30. Evalúa `a.balance`.

Cargando editor...
Mostrar pista

self.balance += amount en deposit.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m7.l1.e3
Intentos: 0Cargando...

Define una clase `Rectangle` con un constructor `__init__(self, width, height)` para establecer el ancho y el alto, y un método `area(self)` que devuelva el producto de ambos. Instancia un rectángulo con ancho `4` y alto `5` guardándolo en `rect`, y evalúa `rect.area()`.

Cargando editor...
Mostrar pista

Recuerda usar self para acceder a los atributos dentro de area(self).

Solución disponible después de 3 intentos