Acceder a las funciones incorporadas por __builtins__

Tengo el siguiente script:

a.py

print(__builtins__.max) import b 

y el siguiente módulo:

b.py

 print(__builtins__.max) 

Lanzándolos con python3 a.py me sale:

  Traceback (most recent call last): File "a.py", line 2, in  import b File "/home/antonio/Scrivania/b.py", line 1, in  print(__builtins__.max) AttributeError: 'dict' object has no attribute 'max' 

asi que no entiendo ¿Por qué en la secuencia de comandos __builtins__ se asigna al módulo builtins en lugar de en el módulo __builtins__ se asigna a un dict?

No utilice __builtins__ ; use el módulo builtins lugar.

El objeto __builtins__ es un detalle de implementación en el que no debe confiar. De la documentación del módulo builtins :

Como detalle de implementación, la mayoría de los módulos tienen el nombre __builtins__ disponible como parte de sus globales. El valor de __builtins__ normalmente es este módulo o el valor del atributo __dict__ de este módulo . Dado que este es un detalle de implementación, no puede ser usado por implementaciones alternativas de Python.

Note mi énfasis allí; puede tener un diccionario o el objeto de módulo cuando accede a __builtins__ .

¿Honestamente? No puedo imaginar lo que estaban pensando cuando hicieron __builtins__ significan cosas diferentes en un script y en un módulo. Estaba usando __builtins__ para acceder a __builtins__ incorporado desde una biblioteca que define su propio ImportError como una API pública y funcionó para mí hasta hoy.

No sé la diferencia exacta. My __builtins__.ImportError estaba trabajando en un módulo para Python 2.xy Python 3.x. Ahora, con algunos cambios anteriores en el código, la misma construcción falla exactamente como en su caso. Encontré su pregunta utilizando la búsqueda en la web y voy a responder por otros que podrían estar en las mismas situaciones.

No puedes usar __builtins__ debido al problema anterior y no puedes usar builtins en Python 2.x, pero logré arreglarlo usando el módulo de seis python.

 from six.moves import builtins 

Esto me funciona tanto en Python 2.x como en Python 3.x y funciona exactamente en el mismo lugar donde __builtins__ falla. Espero que ayude.