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
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.
fido.abbaia()
# equivalente a Cane.abbaia(fido)
# Python pasa fido como self automáticamenteAtributos de instancia frente a atributos de clase
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
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 # 0Pruébalo tú
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()`.
Mostrar pista
math.sqrt(self.x ** 2 + self.y ** 2)
Solución disponible después de 3 intentos
Ejercicio de repaso
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`.
Mostrar pista
self.balance += amount en deposit.
Solución disponible después de 3 intentos
Desafío adicional
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()`.
Mostrar pista
Recuerda usar self para acceder a los atributos dentro de area(self).
Solución disponible después de 3 intentos