[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