Me preguntaba ¿cuál era la mejor práctica para inicializar atributos de objeto en Python, en el cuerpo de la clase o dentro de la función __init__
?Inicialización/declaración de atributos en la clase Python: ¿dónde colocarlos?
es decir
class A(object):
foo = None
vs
class A(object):
def __init__(self):
self.foo = None
tiene sentido, pensé que estaban limitados a la instancia en ambos casos ... gracias :) – fortran
Python tiene un complicado conjunto de [reglas de búsqueda de atributos] (http://www.cafepy.com/article/python_attributes_and_methods/ python_attributes_and_methods.html). Sin entrar en las descripciones, para este caso basta con saber que 'a .__ dict__' se busca primero la tecla' foo', y si no se encuentra allí, entonces se busca 'A .__ dict__'. Es por eso que puedes usar 'a.foo' incluso si' foo' es un atributo de clase. – unutbu
También cabe destacar que para los atributos de clase, si hiciera 'a.foo = whatever', en realidad terminaría creando un nuevo atributo de instancia (que oculta el atributo de clase). 'A.foo' no se modificará. Es un poco complicado, ya que puedes acceder al valor de 'A.foo' con' a.foo', pero asignarlo crearía un nuevo atributo de instancia. – Kat