Has comparison of instancemethods changed between python 2.5 and 2.4?
Frank Niessink
frank at niessink.com
Sat Dec 16 07:19:57 EST 2006
Frank Niessink:
> OK, so that explains why the id of (two references to the same)
> instancemethod(s) may differ. But I'm still confused why two
> instancemethods of two different instances can compare as equal.
I tried to lookup the python source code where the actual comparison
happens. I think it is in methodobject.c (I'm not familiar with the
python source so please correct me if I'm wrong), meth_compare. That
function did not change between python 2.4.4 and 2.5. Moreover, the
implementation suggests that the only way for two methods to be equal is
that their instances point to the same object and their method
definitions are the same. Am I interpreting that correctly?
static int
meth_compare(PyCFunctionObject *a, PyCFunctionObject *b)
{
if (a->m_self != b->m_self)
return (a->m_self < b->m_self) ? -1 : 1;
if (a->m_ml->ml_meth == b->m_ml->ml_meth)
return 0;
if (strcmp(a->m_ml->ml_name, b->m_ml->ml_name) < 0)
return -1;
else
return 1;
}
I'll dig some deeper in my own code, maybe I have two instances that are
somehow different with python 2.4 and equal with python 2.5 and that
register the same method as callback.
Cheers, Frank
More information about the Python-list
mailing list