How functions are mapped to correct filename in python packages?

Viewed 47

For example in requests library we have get method which is defined inside api.py file but i can directly call it with requests.get .

as per my understanding it should be called like this requests.api.get

How python modules handles this.

2 Answers

When you are doing import requests the file requests/__init__.py is imported and when you access its content with dot notation like requests.get you in fact are accessing requests.__init__.get. This contains the following line:

from .api import request, get, head, post, patch, put, delete, options

So this __init__ file has get name in its scope, thats all. More info about __init__.py file here: What is __init__.py for?.

Your intuition is correct that the name should be requests.api.get. In fact, if you look at requests.get.__module__, you will find that it is requests.api. Similarly, requests.get.__globals__ is a reference to requests.api.__dict__.

Many libraries will export functions defined elsewhere through the top level namespace. This is usually done with an import like from .api import get in the __init__.py file of requests.

Related