user1526546
user1526546

Reputation:

Why import builtins if you never redefine any built-in functions?

I am looking at the code in this repo https://github.com/datacenter/cobra and I am seeing imports from builtins as follows in a few files:

cobra/internal/codec/jsoncodec.py:15:from builtins import str
cobra/internal/codec/xmlcodec.py:15:from builtins import str
cobra/internal/base/moimpl.py:16:from builtins import next
cobra/internal/base/moimpl.py:17:from builtins import str
cobra/internal/base/moimpl.py:18:from builtins import object
cobra/internal/rest/accessimpl.py:15:from builtins import object
cobra/internal/rest/accessimpl.py:16:from builtins import str
cobra/mit/session.py:15:from builtins import str
cobra/mit/session.py:16:from builtins import object
cobra/mit/meta.py:16:from builtins import str
cobra/mit/meta.py:17:from builtins import next
cobra/mit/meta.py:18:from builtins import object
cobra/mit/access.py:21:from builtins import object
cobra/mit/naming.py:15:from builtins import next
cobra/mit/naming.py:16:from builtins import str
cobra/mit/naming.py:17:from builtins import object
cobra/mit/request.py:15:from builtins import str
cobra/mit/request.py:16:from builtins import object

What is the logic/what is gained by doing this? There is no place in the module where these objects are re-defined.

On a side note, this breaks the 2.7 compatibility I was expecting from this module as specified in the docs.

Upvotes: 8

Views: 4773

Answers (1)

tdelaney
tdelaney

Reputation: 77347

I don't know why its done in cobra specifically, but its a trick for writing code that works in python 2 and 3. See compatible_idioms. It shouldn't break 2.7 but you have to write "3x-ish" code.

update

For 2.x, the builtins module needs to be installed from pypi. Its not the native builtin functions, but 3.x compatible updates.

Upvotes: 14

Related Questions