Cara, se você encontrar algo, diz aí, mas acredito que não tenha solução pra esse caso. O problema não está na saída da informação, que é o que acontece no format, mas sim na entrada, em que você insere um número inteiro iniciando com 0. Pro python, com razão, isso não faz sentido, já que é mais uma convenção nossa pra representar datas.
Se você fizer questão de ver o 0 no início das datas, além de escrevê-las como string como eu coloquei no meu comentário anterior, outra solução seria fazer:
def formatada(self):
print("{:02d}/{:02d}/{}".format(self.dia, self.mes, self.ano))
Isso vai garantir que sempre que o usuário digitar d = Data(1,9,2019)
, no print você vai ter o 01/09/2019 e não vai afetar números com dois dígitos. Mas creio que fazer
d = Data(01,09,2019)
seja realmente impossível, isso porque esse 0 é usado pra outra coisa no python. No python 2, numeros inteiros iniciados com 0 eram compreendidos como estando em sistema numérico octal. Assim, escrever algo como 07, que ficaria idêntico ao formato da data, significava que o 7 digitado está em octal. No python 3 a sintaxe mudou pra 0o#, ou seja, algo como 0o10, por exemplo, está em octal e, se você printar, vai ter o valor em sistema decimal, que é 8.