The Zen of Python:
Debe haber uno-- y preferiblemente sólo una manera --obvious para hacerlo.
O bien file
o bien debería ir.
>>> type(file)
<type 'type'>
>>> type(open)
<type 'builtin_function_or_method'>
open
es una función que puede devolver cualquier cosa. file()
devuelve solo file
objetos.
Aunque parece open
sólo devuelve file
objetos en Python 2. Y antes de Python 2.5 file
y open
son el mismo objeto.
Como @gnibbler sugirió en los comentarios, la razón original para la existencia de file
podría ser usarlo como el nombre para las clases base.
Además, file()
, en principio, podrían regresar otros tipos como por ejemplo int()
hizo en versiones anteriores de Python:
>>> type(int(2**64)) is long
True
>>> type(int()) is int
True
>>> int is long
False
Esta respuesta es muy similar a @Ryan's answer.
Además BDFL said:
"La clase de archivo es nuevo en Python 2.2 Representa el tipo (clase) de objetos devueltos por el incorporado en la función open() su constructor es una.. alias para open(), pero para compatibilidad futura y retroactiva, open() sigue siendo preferido. " (el énfasis es mío)
Para empezar, se ha ido en Python 3. A pesar de que es una consecuencia y de refuerzo, no es una razón. – delnan
@delnan ¿Qué tipo devuelve 'abrir' en py3 entonces? – Marcin
No estoy seguro de esto, por lo que no responderé, pero puede tener que ver con cómo maneja Python la palabra clave "con". No estoy seguro si puedes usar "con" con un constructor. –