Variáveis de instância em métodos fora do construtor (Python) - por que e como?

Minhas perguntas dizem respeito a variáveis de instância que são inicializadasem métodos fora do construtor de classe. Isto é para Python.

Vou primeiro declarar o que entendo:

Classes podem definir um construtor e também definir outros métodos.As variáveis de instância são geralmente definidas / inicializadas no construtor.Mas variáveis de instância também podem ser definidas / inicializadaslado de fora o construtor, por exemplo nos outros métodos da mesma classe.

Um exemplo de (2) e (3) - vejaself.meow eself.roar noGato classe abaixo:

class Cat():

    def __init__(self):
        self.meow = "Meow!"
    def meow_bigger(self):
        self.roar = "Roar!"

Minhas perguntas:

Por que é uma prática recomendada inicializar a variável de instância no construtor?

Que confusão geral / específica poderia surgir se as variáveis de instância fossem regularmente inicializadas em métodos diferentes do construtor? (Por exemplo, depois de ler o guia Tkinter de Mark Lutz em seu Programming Python, que achei excelente, notei que a variável de instância usada para armazenar os objetos / referências do PhotoImage foi inicializada em outros métodos, não no construtor. Parecia funcionar sem problema lá, mas essa prática poderia causar problemas a longo prazo?)

Em que cenários seriaMelhor inicializar variáveis de instância nos outros métodos, e não no construtor?

Que eu saiba, as variáveis de instância não existem quando o objeto de classe é criado, masdepois de o objeto de classe é instanciado. Continuando com o meu código acima, demonstro o seguinte:

>> c = Cat() 
>> c.meow
'Meow!'
>> c.roar
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'Cat' object has no attribute 'roar'
>>> c.meow_bigger()
>>> c.roar
'Roar!'

Por assim dizer:

Não consigo acessar a variável de instância (c.roar) no início.No entanto, depois de chamar o método de instânciac.meow_bigger () uma vez, de repente consigo acessar a variável de instânciac.roar.Por que o comportamento acima é verdade?

Obrigado por ajudar com meu entendimento.

questionAnswers(6)

yourAnswerToTheQuestion