No final acabei fazendo a solução mais obvia de criar uma classe como todo mundo já tem feito, então nem vou repetir isso aqui.
A respeito desse desafio fiquei com uma dúvida interessante.
Por que antes de criar uma classe do zero tentei antes criar uma classe que filha do datetime.date para isso, assim podendo criar minha classe Data aproveitando todos recursos já disponíveis nessa classe:
from datetime import date
class Data(date):
def __init__(self, dia, mes, ano):
super(Data, self).__init__(year=ano, month=mes, day=dia)
def formatada(self):
print(self.strftime("%d/%m/%y"))
lindo, mas no momento que tentei instanciar essa classe
data = Data(21, 11, 2007)
tive um problema, pois foi lançado uma exceção informando que o dia não estava dentro do "range" de dias do mês informado.
ValueError: day is out of range for month
Pesquisando um pouco descobri que isso ocorre por que por padrão, quando ocorre uma herança aparentemente no construtor da classe filha assume-se que ele recebe primeiramente os parâmetros do init da classe pai antes de considerar os parâmetros definidos na classe filha. Isto é, como se o init da minha classe Data fosse automaticamente definido como:
def __init__(self, year, month, day, dia, mes, ano):
isto é, quando instanciei anteriormente na verdade estava passando 21 para o year, 11 para month e 2007 para day, o que causou a exceção por que o construtor de date checa se o dia informado é valido para o mês informado e certamente 2007 não é um dia pertencente ao mês de novembro.
Então tentei instanciar a classe da seguinte maneira:
data = Data(dia=21, mes=11, ano= 2007)
Nesse caso a seguinte exceção foi lançada:
TypeError: Required argument 'year' (pos 1) not found
Conclui que precisaria encontrar uma maneira de sobrescrever o init da classe pai ignorando os parâmetros exigidos para sua construção.
Não encontrei uma maneira de fazer isso. É possível fazer isso no python? Se for, como?
Ps.: Sou desenvolvedor java, então tenho alguns vícios dessa linguagem, e como java permite uma classe ter múltiplos construtores, sinto um pouco de falta disso no python, isso é possível?