[Python-3000] Types and classes

Robert Brewer fumanchu at aminus.org
Thu Apr 3 01:39:12 CEST 2008


Guido van Rossum wrote:
> On Wed, Apr 2, 2008 at 11:57 PM,
> Paul Prescod <paul at prescod.net> wrote:
> > But does anyone else find it odd that the types of some things
> > are classes and the classes of some things are types?
> > 
> > >>> type(socket.socket())
> > <class 'socket.socket'>
> > >>> type("abc")
> > <type 'str'>
> > >>> socket.socket().__class__
> > <class 'socket.socket'>
> > >>> "abc".__class__
> > <type 'str'>
> > 
> > In a recent talk I could only explain this as a historical quirk.
> > As I understand, it is now possible to make types that behave
> > basically exactly like classes and classes that behave exactly
> > like types. Is there any important difference between them anymore?
>
> I think it's still just a historical quirk; maybe we should bite the
> bullet and fix this in py3k. (Still, 'type' and 'class' will both be
> part of the language, one as a built-in function and metaclass, the
> other as a keyword.)

That's...grating, but livable. Maybe we should change "class" to
"classdef" and "type" to "class" so code like "isinstance(x, type)"
doesn't look so...wrong.

On the other hand, why is there no "function" builtin/metaclass to go
with the "def" keyword? The asymmetry implies a semantic conflict
somewhere (it doesn't *prove* that, just implies).


Robert Brewer
fumanchu at aminus.org



More information about the Python-3000 mailing list