El código
class MyClass:
Property1 = 1
crea una clase MyClass
que tiene un diccionario:
>>> MyClass.__dict__
{'Property1': 1, '__doc__': None, '__module__': '__main__'}
Aviso el par clave-valor 'Property1': 1
. Cuando dice MyClass.Property1
, Python busca en la dict Property1
y si la encuentra, devuelve el valor asociado 1
.
>>> MyClass.Property1
1
Cuando se crea una instancia de la clase,
>>> mc = MyClass()
un diccionario para la instancia también se crea:
>>> mc.__dict__
{}
Aviso este dict está vacía. Cuando dice mc.Property1
, Python primero se ve en mc.__dict__
para la clave 'Property1'
. Como no lo encuentra allí, se ve en el dic de la clase mc
, es decir, MyClass.__dict__
.
>>> mc.Property1
1
Tenga en cuenta que hay mucho más en la historia de Python attribute access. (No he mencionado las reglas importantes relativas a los descriptores, por ejemplo). Pero lo anterior le indica la regla para los casos más comunes de acceso a los atributos.
Porque así es como funcionan las variables de clase? – SilentGhost
@SilentGhost: Sí, las variables de clase de Python funcionan de esta manera, pero este comportamiento no es necesario y no puedo encontrar una explicación para él. – Philipp