Почему пользовательские типы принимают специальные атрибуты в Python (и созданный-ins не делают)?

Я хотел бы знать, почему каждый может создать новый атрибут ("новый", означает "не ранее определенный в теле класса") для экземпляра пользовательского типа, но не может сделать то же для встроенного типа, как object самостоятельно.

Пример кода:

>>> class SomeClass(object):
...     pass
... 
>>> sc = SomeClass()
>>> sc.name = "AAA"
>>> sc.name
'AAA'
>>> obj = object()
>>> obj.name = "BBB"
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'object' object has no attribute 'name'
10
задан Chuim 2 August 2010 в 15:02
поделиться

1 ответ

Некоторые объекты не имеют атрибута __dict__ (который является словарем, хранящим все пользовательские "вновь определенные" атрибуты). Вы можете эмулировать такое же поведение, используя переменную __slots__ (см. python reference). Когда вы подклассифицируете класс с помощью __dict__, переменная __slots__ не имеет никакого эффекта. А поскольку вы всегда подклассируете object для новых классов стиля, object не должен иметь __dict__, поскольку это сделает невозможным использование __slots__. Классы без __slots__ занимают меньше памяти и, вероятно, немного быстрее.

6
ответ дан 4 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: