8.3. Metaprogramming Namespace

8.3.1. Globals

globals()
{'__name__': '__main__', '__builtins__': {...}}
print(__name__)
__main__

8.3.2. Variables

The way you always interacted with variables in Python is by using their names directly. But you can also access them through the globals() dictionary:

globals()
{'__name__': '__main__', '__builtins__': {...}}

'x' in globals()
False

x = 1

'x' in globals()
True

globals()
{'__name__': '__main__', '__builtins__': {...}, 'x': 1}

You can also modify the value of a variable using the globals() dictionary:

x
1

globals()['x']
1

8.3.3. Functions

globals()
{'__name__': '__main__', '__builtins__': {...}}

'add' in globals()
False

def add(a, b):
    return a + b

'add' in globals()
True
globals()
{'__name__': '__main__', '__builtins__': {...}, 'add': <function add at 0x...>}
add
<function add at 0x...>

add(1, 2)
3
add.__call__(1, 2)
3
globals()['add']
<function add at 0x...>

globals()['add'](1,2)
3

globals()['add'].__call__(1, 2)
3

8.3.4. Classes

globals()
{'__name__': '__main__', '__builtins__': {...}}

'User' in globals()
False

class User:
    pass

'User' in globals()
True

globals()
{'__name__': '__main__', '__builtins__': {...}, 'User': <class '__main__.User'>}
User
<class '__main__.User'>

User()
<__main__.User object at 0x...>
globals()['User']
<class '__main__.User'>

globals()['User']()
<__main__.User object at 0x...>

8.3.5. Class Namespace

class User:
    AGE_MIN = 18
    AGE_MAX = 65

    def __init__(self, firstname, lastname, age):
        self.firstname = firstname
        self.lastname = lastname
        self.age = age

    def login(self):
        return 'Logged in'

    def logout(self):
        return 'Logged out'
result = vars(User)

type(result)
<class 'mappingproxy'>

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