Variables de instancia en métodos fuera del constructor (Python): ¿por qué y cómo?

Mis preguntas se refieren a variables de instancia que se inicializanen métodos fuera del constructor de la clase. Esto es para Python.

Primero declararé lo que entiendo:

Las clases pueden definir un constructor, y también puede definir otros métodos.Las variables de instancia generalmente se definen / inicializan dentro del constructor.Pero las variables de instancia también se pueden definir / inicializarfuera de el constructor, p. en los otros métodos de la misma clase.

Un ejemplo de (2) y (3) - verself.meow yrugido propio en elGato clase a continuación:

class Cat():

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

Mis preguntas:

¿Por qué es una buena práctica inicializar la variable de instancia dentro del constructor?

¿Qué desorden general / específico podría surgir si las variables de instancia se inicializan regularmente en métodos distintos del constructor? (Por ejemplo, después de leer la guía Tkinter de Mark Lutz en su Python de programación, que pensé que era excelente, noté que la variable de instancia utilizada para contener los objetos / referencias de PhotoImage se inicializó en los métodos adicionales, no en el constructor. Parecía funcionar sin problema allí, pero ¿podría esa práctica causar problemas a largo plazo?)

¿En qué escenarios seríamejor para inicializar variables de instancia en los otros métodos, en lugar de en el constructor?

Que yo sepa, las variables de instancia no existen cuando se crea el objeto de clase, sinodespués el objeto de clase se instancia. Continuando con mi código anterior, demuestro esto:

>> 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!'

Como si fuera:

No puedo acceder a la variable de instancia (c. rugido) primero.Sin embargo, después de haber llamado al método de instanciac.meow_bigger () una vez, de repente puedo acceder a la variable de instanciac. rugido.¿Por qué es así el comportamiento anterior?

Gracias por ayudarme con mi comprensión.

Respuestas a la pregunta(6)

Su respuesta a la pregunta