[Python-Dev] can't set attributes of built-in/extension type

Guido van Rossum guido at python.org
Sun Feb 24 18:11:25 CET 2008


On Sun, Feb 24, 2008 at 6:49 AM, Neal Becker <ndbecker2 at gmail.com> wrote:
>
> Guido van Rossum wrote:
>
>  > On Sat, Feb 23, 2008 at 4:55 PM, Neal Becker <ndbecker2 at gmail.com> wrote:
>  >> There is some discussion on this subject, archived here:
>  >>  http://permalink.gmane.org/gmane.comp.python.general/560661
>  >>
>  >>  I wonder if anyone could shed some light on this subject?
>  >>
>  >>  (Or, help me understand, what is the difference between a type that I
>  >>  create using python C api and a python class?)
>  >
>  > This is prohibited intentionally to prevent accidental fatal changes
>  > to built-in types (fatal to parts of the code that you never though
>  > of). Also, it is done to prevent the changes to affect different
>  > interpreters residing in the address space, since built-in types
>  > (unlike user-defined classes) are shared between all such
>  > interpreters.
>  >
>
>  Thanks for the info.
>
>  I'm still curious.  What if I wanted to create a 'real' python class using
>  python c-api?  How is that done?

Use PyObject_Call() or one of its friends to call PyType_Type with the
appropriate arguments (a name, a tuple of base classes, and a dict of
methods etc.). This is the same as calling type(name, bases,
namespace) from Python. The type object will be on the heap and fully
mutable.

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


More information about the Python-Dev mailing list