[Bf-python] short term goals

Ken Hughes khughes at pacific.edu
Tue Jul 19 08:36:09 CEST 2005


Damn... wrong button.  Let me try again.

Stephen Swaney wrote:

> 2) start to migrate our attribute handling code to use the tp_getset
> interface.
> 
> Right now our attribute access is done thru the tp_getattr and
> tp_setattr slots in our PyTypeObjects where we lookup string names for
> attributes and call the appropriate method.  Since the programmatic
> interface here is similar to method calls we have duplicated all
> our attribute access with  x.getStuff() / x.setStuff() methods
> 
> The difference between tp_getset style and the x.setStuff() is the way
> arguments are passed and the return types.  For tp_getset, the
> argument is a PyObject pointer.  For the setStuff() style,
> that same pyObject argument is wrapped in a tuple.
> 
> Since tp_getset is the wave of the future, what we would like to do
> here is have the setStuff() methods parse out the pyobject and then
> call the appropriate method from the PyGetSetDef table ( the one for
> the tp_getset slot ).  Both getStuff() and setStuff() wrappers will
> also need to fix up the return type.
> 
> This is mostly grunt work, but happily we have a willing victim, errr,
> I mean volunteer.  Thanks, Ken!
> 
> Right now, for backward compatibility, we will keep the getStuff() 
> setStuff() methods unchanged.

So the naming convention for method x.getStuff()/x.setStuff() would be 
to have an attribute named x.stuff (whether stuff exists now or not).
Similarly x.getOtherStuff()/x.setOtherStuff() would be x.otherStuff,
etc.  And I'll ignore methods which are not attribute-related (ex,
curve.update() ) ?

And should I be using the style that sapir is using in his MTex.c 
changes for declaring the getset procedures?

#define MTEXGET(x) \
         static PyObject *MTex_get##x( BPy_MTex *self, void *closure );
#define MTEXSET(x) \
         static int MTex_set##x( BPy_MTex *self, PyObject *value, void 
*closure);#define MTEXGETSET(x) \
         MTEXGET(x) \
         MTEXSET(x)

MTEXGETSET(Tex)
MTEXGETSET(TexCo)
MTEXGETSET(Object)

....

/*****************************************************************************/
/* Python get/set methods table                                       */
/*****************************************************************************/

static PyGetSetDef MTex_getseters[] = {
         { "tex", (getter) MTex_getTex, (setter) MTex_setTex,
                 "Texture whose mapping this MTex describes", NULL },
         { "texco", (getter) MTex_getTexCo, (setter) MTex_setTexCo,
...


Ken




More information about the Bf-python mailing list