Python: почему атрибут __dict__ отсутствует во встроенных экземплярах классов

Если мое понимание модели данных Python верно, то и классы, и экземпляры классов имеют связанные с ними объекты __dict__, которые содержат все атрибуты. Однако я немного не понимаю, почему некоторые экземпляры классов, например, экземпляры str, не имеют атрибута __dict__.

Если я создам пользовательский класс:

class Foo:
     def __init__(self):
             self.firstname = "John"
             self.lastname = "Smith"

Тогда я могу получить переменные экземпляра, сказав:

>>> f = Foo()
>>> print(f.__dict__)
{'lastname': 'Smith', 'firstname': 'John'}

Но если я попытаюсь сделать то же самое с экземпляром встроенного str, я получу:

>>> s = "abc"
>>> print(s.__dict__)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__dict__'

Итак, почему экземпляры str не имеют атрибута __dict__?

8
задан Channel72 29 February 2012 в 15:46
поделиться