open is not obsolete (was Re: understanding self

Colin J. Williams cjw at
Thu Jul 8 14:07:30 CEST 2004

Delaney, Timothy C (Timothy) wrote:

> Jeff Shannon wrote:
>>Okay, perhaps "legacy" is a better term than "obsolete".  In either
>>case, it's recommended that it not be used in new code, even if there
>>is no current plan to remove it.  Not that the specifics of this case
>>are particularly germane to the point I was making...
> As mentioned by Tony, this is not the case. From python-dev:
>>>Then should the following line in the reference be changed?
>>>"The file() constructor is new in Python 2.2. The previous spelling,
>>>open(), is retained for compatibility, and is an alias for file()."
>>>That *strongly* suggests that the preferred spelling is file(), and
>>>that open() shouldn't be used for new code.
>>Oops, yes.  I didn't write that, and it doesn't convey my feelings
>>about file() vs. open().  Here's a suggestion for better words:
>>"The file class is new in Python 2.2.  It represents the type (class)
>>of objects returned by the built-in open() function.  Its constructor
>>is an alias for open(), but for future and backwards compatibility,
>>open() remains preferred."
>>--Guido van Rossum (home page:
> Tim Delaney

"file" is analogous to a class constructor, while "open" becomes a 
factory function for that class, with the same signature.

This raises the question as to which is the better way of creating an 
instance of a class.

It seems to me that the constructor is, for simple cass, the better way 
to go.  It provides one way and avoids the question of "Should I use A 
or B when there are more than one ways of doing some task.

What is the general view?

Colin W.

More information about the Python-list mailing list