*
wi*****************@gmail.com wrote:
tp_getattro is like defining __getattribute__, i.e. it gets called on
every attribute read access. You can use PyObject_GenericGetAttr inside
the function to find predefined attributes before applying your own
rules.
Thanks for the reply. I see and was afraid of that, I don't have a
predefinded list of attributes. I want to get them from the C library
as needed. Is there another way I should be accessing the data from my
C lib since it isn't known at compile time?
Well, methods *are* predefined attributes (which just happen to be callable
and bound to the instance).
You can use PyObject_GenericGetAttr like this:
static PyObject *
mytype_getattro(mytypeobject *self, PyObject *name)
{
PyObject *tmp;
if (!(tmp = PyObject_GenericGetAttr((PyObject *)self, name))) {
if (!PyErr_ExceptionMatches(PyExc_AttributeError))
return NULL;
PyErr_Clear();
}
else
return tmp;
/* your code */
}
- or -
explicitly define __getattr__ in tp_methods (instead of tp_getattro), which
only gets called on unknown attributes then.
nd
--
die (eval q-qq:Just Another Perl Hacker
:-)
# André Malo, <http://pub.perlig.de/> #