[Python-Dev] PyInstance_Check() and new-style classes
Eric Wilhelm
ewilhelm at sbcglobal.net
Mon Jul 12 18:37:40 CEST 2004
# The following was supposedly scribed by
# Phillip J. Eby
# on Monday 12 July 2004 11:12 am:
>>I'm not sure if I understand what this flag is telling me. According to
>> the api/type-structs.html, Py_TPFLAGS_HEAPTYPE is set when the object is
>> allocated. To me, that reads that it would be set for builtin tuples, etc
>> even if they were not subclassed.
>
>A "heap type" is a type whose type struct is in heap memory. A "non-heap"
>type is one whose type struct is declared statically, i.e. in C code.
>
>So, a non-heap type is either a built-in type, or an extension type
>provided by a C extension module. A heap type is either one coded in pure
>Python, or potentially a C extension coded in an unusual fashion (e.g. via
>Pyrex).
Okay, looks like this will work just beautifully. Heaptype is true for an
instance of a class which inherits from a builtin type, but not for a simple
instance of a builtin type.
True, if I were trying to wrap a C extension module via Inline::Python,
heaptype would not be true, but a really easy work-around should exist by
simply defining a python class which does nothing but inherit the C
extension. That would give the Inline::Python code something to grab onto.
Anyway, this is much cleaner:
http://ericwilhelm.homeip.net/svn/Inline-Python/trunk/xs-based/py2pl.c
- int type_sum =
- PyString_Check(obj)+
- PyNumber_Check(obj)+
<snip lots of PyFoo_Check(obj) + lines>
/* wrap an instance of a Python class */
/* elw: here we need to make these look like instances: */
- if ((! type_sum && PyType_Check(PyObject_Type(obj))) ||
PyInstance_Check(obj)) {
+ if ((obj->ob_type->tp_flags & Py_TPFLAGS_HEAPTYPE) ||
PyInstance_Check(obj)) {
So, I think, with everybody's help, I may have found "the right way" (TM.)
Should this be better documented, or is this an obscure usage? Will it break
in future versions of Python?
Thanks,
Eric
--
I arise in the morning torn between a desire to improve the world and a
desire to enjoy the world. This makes it hard to plan the day.
--E.B. White
More information about the Python-Dev
mailing list