should I put old or new style classes in my book?

Arnaud Delobelle arnodel at googlemail.com
Thu May 29 15:12:15 EDT 2008


Jason <tenax.raccoon at gmail.com> writes:

> On May 29, 10:07 am, allendow... at gmail.com wrote:
>> Hi All,
>>
>> I am working on a revised edition of How To Think Like a Computer
>> Scientist,
>> which is going to be called Think Python.  It will be published by
>> Cambridge
>> University Press, but there will still be a free version under the GNU
>> FDL.
>>
>> You can see the latest version at thinkpython.com; I am revising now,
>> so
>> I welcome all comments, suggestions, corrections, etc.
>>
>> Anyway, I am posting to ask about the current status of new style
>> classes.
>> I am planning to present only one style in the book, because the
>> differences
>> between them don't matter for anything I am doing in the book.
>>
>> The current edition of the book presents old style classes.  I am
>> considering
>> switching to new style classes on the assumption that this should be
>> the default
>> choice for new programs.  The drawback is that a lot of the online
>> documentation
>> still uses old style classes.
>>
>> Thanks for any guidance you can provide.
>>
>> Cheers,
>> Allen
>
> I've got Python 3.0 alpha 2.  In this version, it looks like you can
> define classes in either the old style or new style.  (I snipped the
> top line a bit in the following example):
>
> Python 3.0a2 (r30a2:59405M, Dec  7 2007, 15:23:28
> Type "help", "copyright", "credits" or "license"
>>>> class one(object): pass
> ...
>>>> class two: pass
> ...
>>>> two
> <class '__main__.two'>
>>>> one
> <class '__main__.one'>
>>>> type(one)
> <type 'type'>
>>>> type(two)
> <type 'type'>
>>>>

Note that you can get the same behaviour in Python 2.2+ by setting the
global variable __metaclass__ to type:

marigold:~ arno$ python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> __metaclass__ = type
>>> class Foo: pass
... 
>>> type(Foo)
<type 'type'>
>>> 

-- 
Arnaud



More information about the Python-list mailing list