Объекты функции причины поддерживают произвольные атрибуты, так это то, что до того, как мы добавили эту функцию, несколько фреймворков (например, генераторы синтаксического анализатора) злоупотребляли функциями docstrings (и другим атрибутом объектов функций), чтобы скрыть информацию о каждой функции, которая была критической для них - необходимость такой ассоциации произвольных именованных атрибутов для функционирования объектов, доказанных на примере, поддерживая их непосредственно на языке, а не отбрасывать и отпускать (например) докстры, злоупотребляемые, была довольно очевидной.
Для поддержки произвольного экземпляра атрибутов типа должен поставить каждый из его экземпляров с __dict__
- это не большим дела для функций (которые никогда не являются крошечными объектами, так или иначе), но это может также быть для других объектов предназначенных для быть крошечным. Сделав модель object
такой легкой, как мы могли, а также предоставив __slots__
, чтобы избежать исключения в каждом случае __dict__
в подтипах object
, мы поддерживали небольшие специализированные «значения», насколько это возможно.
+1, я просто о задать один и тот же вопрос, но потом вспомнить, что нужно сначала искать существующий! Хорошие ответы ниже. – Edmund
очень хороший вопрос, у меня есть аналогичная проблема –
Возможный дубликат [Невозможно установить атрибуты класса объектов] (http://stackoverflow.com/questions/1529002/cant-set-attributes-of-object-class) –