Builtin function vars() looks more Pythonic to me, but I see __dict__ used more frequently.
The Python documentation indicates that they are equivalent.
One blogger claims that __dict__ is faster than vars().
Which shall I use?
Builtin function vars() looks more Pythonic to me, but I see __dict__ used more frequently.
The Python documentation indicates that they are equivalent.
One blogger claims that __dict__ is faster than vars().
Which shall I use?
I'd use vars().
From: https://wiki.python.org/moin/DubiousPython#Premature_Optimization
While a correctly applied optimization can indeed speed up code, optimizing code that is only seldom use [..] can make code harder to read. [..] Write correct code first, then make it fast (if necessary).
From: The Zen of Python
Readability counts.
Generally, you should consider dunder/magic methods to be the implementation and invoking functions/methods as the API, so it would be preferable to use vars() over __dict__, in the same way that you would do len(a_list) and not a_list.__len__(), or a_dict["key"] rather than a_dict.__getitem__('key')
I agree vars should be preferred. My rationale is that, as python evolves, vars might be extended to do more than __dict__ does (for example, work for objects with slots, possibly in 3.7).
__dict__just to avoid another layer of parentheses. Flat is better than nested and all. - user2357112 supports Monica__dict__being slightly faster is no surprise. Accessing object attributes is faster than calling a function. - aIKidvarsseems cooler, and a little more neat. I can imagine this is more useful for beginners. It would be easier to explain, "Getting the vars of an object". - aIKid__dict__is more intuitive because I get backdictrepresentation of an object. - Akavall