[Python-3000] Types and classes
Guido van Rossum
guido at python.org
Thu Apr 3 00:20:31 CEST 2008
On Wed, Apr 2, 2008 at 3:03 PM, Amaury Forgeot d'Arc <amauryfa at gmail.com> 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 can find one difference:
> - types are written in C
> - classes are written in Python
>
> and there is a difference in behaviour:
> most types don't have a writable __dict__, and you cannot add members.
> classes are more flexible.
That's more correctly described as the difference between built-in
types/classes and user-defined types/classes.
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.)
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-3000
mailing list