2012-02-29 18 views
6

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?

+2

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? –

Respuesta

10

Las instancias de tipos definidos en C no tienen un atributo __dict__ de forma predeterminada.

0

Sólo para añadir a esto:

Usted puede obtener el equivalente de una única __dict__ leer con esto:

{s:getattr(x,s) for x in dir(x)} 
Cuestiones relacionadas