В то время как правильно применяемая оптимизация действительно может ускорить работу кода, оптимизирующий код, который редко используется [..], может затруднить чтение кода. [..] Сначала напишите правильный код, затем сделайте его быстрым (при необходимости).
Как правило, вы должны рассматривать методы dunder/magic как реализацию и вызывать функции/методы как API, поэтому было бы предпочтительнее использовать vars() over __dict__, так же, как вы бы сделали len(a_list), а не a_list.__len__(), или a_dict["key"], а не a_dict.__getitem__('key')
Ответ 3
Я согласен vars. Мое объяснение состоит в том, что, по мере развития python, vars может быть расширен, чтобы сделать больше, чем __dict__ (например, работает для объектов с слотами, возможно, в 3.7).