Python: varias llamadas a __init __ () en la misma instancia
-
23-09-2019 - |
Pregunta
La función __init__()
se llama cuando se crea objeto.
¿Está bien para llamar a una función de objeto __init__()
nuevo, después de su sido creados?
instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)
¿por qué alguien quiere __init__()
llamada sobre un objeto que ya está creado?
buena pregunta. yo quiero volver a inicializar los campos de la instancia.
Solución
bien sea para __init__
llamado más de una vez en un objeto, siempre y cuando __init__
se codifica con el efecto que desea obtener (sea lo que sea). Un caso típico donde ocurre (! Así que mejor __init__
código de forma apropiada -) es cuando el método __new__
de su clase devuelve una instancia de la clase: que ¿Tiene causa __init__
para ser llamado en la instancia devuelta ( para lo que podría ser el segundo o XX, el tiempo, si se mantiene "reciclar" los casos a través de su __new__
-).
Otros consejos
Puede, pero es un poco de romper lo __init__
se pretende hacer. Una gran cantidad de Python es en realidad la convención, por lo que también podría seguir a continuación y esperar __init__
que sólo se llama una vez. Me gustaría recomendar la creación de una función llamada init
o reset
o algo que establece las variables de instancia, el uso que cuando se desea restablecer el ejemplo, y tienen __init__
simplemente llame init
. Esto sin duda se parece más sensata:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
Por lo que yo sé, que no causa ningún problema ( editar como lo sugiere el uso kosher de super(...).__init__(...)
), pero creo que tener un método reset()
y decir que es tanto en __init__()
y cuando tendrá que restablecer sería más limpio.