[Python-Dev] Detecting tp_compare / tp_richcompare from Python

Tres Seaver tseaver at palladion.com
Thu Nov 8 17:18:32 CET 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
While porting the BTrees package (split out from ZODB) to Python3., my
first step is to get the pure-Python reference implementation working:
in order to do that, I need a way to check that objects used as keys are
*not* using the comparison semantics inherited from the base 'object'
class, because those semantics rely on properties which are not stable
across the lifetime of the (persisted / restored) key.
The existing C code does something like::
 static int
 check_argument_cmp(PyObject *arg)
 {
 if (arg->ob_type->tp_richcompare == NULL
 && arg->ob_type->tp_compare ==
 ((PyTypeObject *)object_)->ob_type->tp_compare)
 {
 PyErr_SetString(PyExc_TypeError, "Object has default comparison");
 return 0;
 }
 return 1;
 }
Unless I'm mistaken, there is no way to do the equivalent from pure
Python.. I tried a couple of approximations which relied on non-API
attributes (I"m looking at out, methodwrapper.__objclass__), but without
much success (and I need the code to work on PyPy / Jython, too).
Am I missing something?
Tres.
- -- 
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iEYEARECAAYFAlCb21gACgkQ+gerLs4ltQ4jBACfV0lQaQ2eW2vhAtWunLUsPQWM
esEAoMYeeQvlJVnckaBg4HM19LoxPIWB
=+d+0
-----END PGP SIGNATURE-----


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /