Si mi comprensión del modelo de datos de Python es correcta, ambas clases e instancias de clase tienen objetos __dict__
asociados que contienen todos los atributos. Sin embargo, estoy un poco confundido sobre por qué ciertas instancias de clases, como las instancias de str
por ejemplo, no tienen un atributo __dict__
.Python: por qué el atributo __dict__ no está en las instancias de clase incorporadas
Si creo una clase personalizada:
class Foo:
def __init__(self):
self.firstname = "John"
self.lastname = "Smith"
Entonces yo puede conseguir a las variables de instancia diciendo:
>>> f = Foo()
>>> print(f.__dict__)
{'lastname': 'Smith', 'firstname': 'John'}
Pero si trato de hacer lo mismo con una instancia de la incorporada en str
, me sale:
>>> s = "abc"
>>> print(s.__dict__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__dict__'
Así que, ¿por qué no las instancias de str
tienen un __dict__
atributo?
Para más detalles sobre esto, si cada dict tenía un '__dict__', entonces no habría tiene que ser '__dict __.__ dict__' también - ¿qué tan profunda debe ser la recursión? –