9.7. Idiom Vars

9.7.1. SetUp

>>> class User:
...     def __init__(self, firstname, lastname):
...         self.firstname = firstname
...         self.lastname = lastname
...
...     def login(self):
...         return 'logged-in'
...
...     def logout(self):
...         return 'logged-out'

9.7.2. Class

>>> vars(User)
mappingproxy({
    '__module__': '__main__',
    '__firstlineno__': 1,
    '__init__': <function User.__init__ at 0x...>,
    'login': <function User.login at 0x...>,
    'logout': <function User.logout at 0x...>,
    '__static_attributes__': ('firstname', 'lastname'),
    '__dict__': <attribute '__dict__' of 'User' objects>,
    '__weakref__': <attribute '__weakref__' of 'User' objects>,
    '__doc__': None})

9.7.3. Instance

>>> alice = User('Alice', 'Apricot')
>>>
>>> vars(alice)
{'firstname': 'Alice', 'lastname': 'Apricot'}

9.7.4. Vars vs __dict__

  • The same

  • Function vars() use __dict__ for the result

  • Using vars() is preferred

>>> alice = User('Alice', 'Apricot')
>>>
>>> vars(alice)
{'firstname': 'Alice', 'lastname': 'Apricot'}
>>>
>>> alice.__dict__
{'firstname': 'Alice', 'lastname': 'Apricot'}

9.7.5. Usage

  • keys

  • values

>>> keys = list(vars(alice).keys())
>>> values = list(vars(alice).values())
>>>
>>> print(keys)
['firstname', 'lastname']
>>>
>>> print(values)
['Alice', 'Apricot']