Я не могу читать мысли, но я подозреваю, что логическое обоснование выглядит следующим образом:
- Если
__weakref__
не было отключено по умолчанию при использовании __slots__
, предоставляя способ сохранитьсвязанная память явно потребовала бы еще одного специального механизма отказа - Более особые случаи увеличивают сложность языка, и этот случай не принесет реальной выгоды
Учитывая, как редко встречаются слабые ссылкииспользовался вообще, вероятно, было бы проще считать его более простым отключенным по умолчанию с возможностью возврата обратно.
Дайвинг к деталям реализации, в некотором смысле, не определенные пользователем пользовательские классы имеют ровно два "слота«(один для __dict__
, один для __weakref__
) сверх заголовка базового объекта, поэтому, если __slots__
произнесет« Заменить по умолчанию этим явным списком », естественно удалить __dict__
и __weakref__
когда __slots__
входит в игру.