05.04.19 15:33, Jeroen Demeyer пише:
On 2019-04-05 15:13, Serhiy Storchaka wrote:
It is easy to implement a function in C.
Why does it need to be a PyCFunction? You could put an actual method
descriptor in the class. In other words, use PyDescr_NewMethod() instead
of PyCFunction_New() + PyInstanceMethod_New(). It's probably going to be
faster too since the instancemethod adds an unoptimized extra level of
indirection.
PyDescr_NewMethod() takes PyTypeObject* which is not known at that
moment. But maybe passing &PyBaseObject_Type will make a trick. I need
to try.
Yes, this is what I want to do. I did not do this only because
implementing method-like functions which which do not belong to concrete
class implemented in C is not convention.
Sure, you could implement separate methods like __gt__ in C, but that's
still less efficient than just implementing a specific tp_richcompare
for total_ordering and then having the usual wrapper descriptors for
__gt__.
At Python level we can monkeypatch __gt__, but not tp_richcompare.
In any case, removing a C API is a large breakage, and it is better to
avoid it unless that API is inherently broken.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com