[Python-Dev] Identifier API

Antoine Pitrou solipsis at pitrou.net
Tue Oct 11 16:24:30 CEST 2011


On Tue, 11 Oct 2011 09:19:43 -0400
Barry Warsaw <barry at python.org> wrote:
> On Oct 11, 2011, at 02:36 PM, Hrvoje Niksic wrote:
> 
> >On 10/08/2011 04:54 PM, "Martin v. Löwis" wrote:
> >>       tmp = PyObject_CallMethod(result, "update", "O", other);
> >>
> >> would be replaced with
> >>
> >>        PyObject *tmp;
> >>        Py_identifier(update);
> >>        ...
> >>        tmp = PyObject_CallMethodId(result,&PyId_update, "O", other);
> >
> >An alternative I am fond of is to to avoid introducing a new type, and simply
> >initialize a PyObject * and register its address.  For example:
> >
> >   PyObject *tmp;
> >   static PyObject *s_update;    // pick a naming convention
> >
> >   PY_IDENTIFIER_INIT(update);
> >   tmp = PyObject_CallMethodObj(result, s_update, "O", other);
> >
> >   (but also PyObject_GetAttr(o, s_update), etc.)
> 
> I like this better too because of the all-caps macro name.  Something about
> seeing "Py_identifier" look like a function call and having it add the magical
> PyId_update local bugs me.  It just looks wrong, whereas the all-caps is more
> of a cultural clue that something else is going on.

+1 for something more recognizable.
I think "const string" is more accurate than "identifier" as well.

Regards

Antoine.




More information about the Python-Dev mailing list