Constructores alternativos
Python también te permite definir métodos de clase, utilizando el decorador @classmethod
y un primer argumento especial cls
. El principal uso de los métodos de clase es definir métodos que devuelvan una instancia de la clase, pero que no utilicen el mismo código que __init__()
.
Por ejemplo, estás desarrollando un paquete de series temporales y quieres definir tu propia clase para trabajar con fechas, BetterDate
. Los atributos de la clase serán year
, month
, y day
. Quieres tener un constructor que cree objetos BetterDate
dados los valores de año, mes y día, pero también quieres poder crear objetos BetterDate
a partir de cadenas como 2020-04-30
.
Puede que te resulten útiles las siguientes funciones:
- El método
.split("-")
dividirá una cadena en"-"
en una matriz, por ejemplo"2020-04-30".split("-")
devuelve["2020", "04", "30"]
, int()
convertirá una cadena en un número, por ejemploint("2019")
es2019
.
Este ejercicio forma parte del curso
Programación orientada a objetos en Python
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
class BetterDate:
# Constructor
def __init__(self, year, month, day):
# Recall that Python allows multiple variable assignments in one line
self.year, self.month, self.day = year, month, day
# Define a class method from_str
____
def from_str(____, datestr):
# Split the string at "-" and convert each part to integer
parts = datestr.split("-")
year, month, day = int(parts[0]), ____, ____
# Return the class instance
____ ____(____, ____, ____)
bd = BetterDate.from_str('2020-04-30')
print(bd.year)
print(bd.month)
print(bd.day)