[Python-Dev] Classes that claim to be defined in __builtin__ but aren't

Guido van Rossum guido at python.org
Sun Aug 15 08:33:13 CEST 2004


> Guido van Rossum wrote:
> 
> >>Sooo should (for 'generator' in objects that claim to be in 
> >>__builtins__ but aren't),
> >>1) 'generator' be added to __builtins__
> >>2) 'generator' be added to types.py and its __module__ be set to 'types'
> >>3) 'generator' be added to <newmodule>.py and its __module__ be set to 
> >>'<newmodule>' (and a name for the module chosen)
> > 
> > I guess (1).

[Note: it should be added to __builtin__, not __builtins__ -- the two
are related but __builtin__ is the module and __builtins__ is a secret
attribute that references the module or its __dict__ for purposes of
sandboxing.

[Brett C]
> The problem I see with explicitly adding this stuff to __builtins__
> is that tab-completion in the interpreter is suddenly going to have
> all of this extra stuff that people are not going want to really see
> that often.

There's already lots of stuff there that's rarely used.

> The other point I would like to make is that almost everything in
> __builtins__ is either an exception, a singleton (thinking of True
> and False), or a function (even thinking of list and dict since you
> can use their factory methods).

But list and dict are *not* functions, they are types, and they can be
used for subclassing and type checking too.  These are the precedent
for placing generator etc. in __builtin__.

> The only exceptions I can think of are __name__ and that is just
> part of the design.  Throwing in generator and any of the other
> types that are defined by the built-in types will go against all of
> this unless we create factory methods for them which is not really
> desired since they are returned only in certain situations.

They should not be made factory functions if they aren't already.

> I personally prefer option 2.

Bah.  The types module shouldn't be the "home" for any types -- it's
just a collection of convenient aliases, and mostly they have the
wrong names.  It should be deprecated.

Also note that at least 6 of these "anonymous" built-in types
currently have another alias in the 'new' module, which means that
they *are* factories already.  It would be nice if that module could
finally be deprecated.

--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list