В примерах исходных и SO ответы, которые имеют некоторую степень Python объект самоанализа, общая картина:Зачем использовать getattr() вместо __dict__ при доступе к атрибутам объекта Python?
getattr(some_object, attribute_name_string)
Есть причина, почему эта модель является предпочтительной:
some_object.__dict__[attribute_name_string]
, который, кажется, более конкретно показывать, что происходит? Это потому, что последнее слишком близко к конкретной реализации в CPython, которое может быть изменено?
NB Оригинальный вопрос неправильно определил популярные идиомы как:
some_object.__getattr__(attribute_name_string)
[Для соблюдения протокола дескриптора.] (Https://docs.python.org/2/reference/datamodel.html#object.__setattr__) –
@AshwiniChaudhary: Спасибо, читаю связанные документы. – zehnpaard
В какой-то мере причина использования 'getattr' - это * точно * причина, которую вы определили, как в поддержку' __dict__': она прямо показывает, что происходит, и тем самым нарушает инкапсуляцию. –