3
respostas

Método privado __str__()

O método str() tanto na classe DocCpf quanto na classe DocCnpj possuem funções de formatação, entretanto fiquei confuso, pois no código em nenhum momento ele é chamado explicitamente nas classes. A dúvida é: o método str() é executado quando executa-se o comando print() ? Se sim, como isso é feito, visto que o parametro de entrada no comando print() não tem DocCpf.str().

3 respostas

Sim, isso faz parte da inteligência do Python, ele que faz essa chamada +:

Todos os argumentos que não são nomeados são convertidos em strings como str() faz e gravados no fluxo, separados por sep e seguidos por end. sep e end devem ser strings; eles também podem ser None, o que significa usar os valores padrão. Se nenhum object for fornecido, print() escreverá apenas end.

O comando print chama o str() implicitamente e então se houver um método __str__() na classe que gerou o objeto ele vai ser usado para gerar a representação textual do objeto que será mostrada pela função print.

https://docs.python.org/pt-br/3/library/stdtypes.html https://docs.python.org/pt-br/3/library/stdtypes.html#str

O comando print chama o str() e aí quando você utiliza o método str() na sua classe, você está utilizando o polimorfismo para reescrever o método, daí quando você utiliza o print(objeto) ele vai ler a representação contida no método str() referente aquela classe.