Если мое понимание модели данных 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__
?