[Python-Dev] CALL_ATTR patch (was: 2.3b1 release) (original) (raw)
Guido van Rossum guido@python.org
Thu, 17 Apr 2003 22:27:09 -0400
- Previous message: [Python-Dev] CALL_ATTR patch (was: 2.3b1 release)
- Next message: [Python-Dev] CALL_ATTR patch (was: 2.3b1 release)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
While we're on the topic -- Guid, how would you feel about the idea of giving built-in function objects the same instance- binding behaviour as interpreted functions?
This would help Pyrex considerably, because currently I have to resort to a kludge to make Pyrex-defined functions work as methods. It mostly works, but it has some side effects, such as breaking the most common idiomatic usage of staticmethod() and classmethod(). If built-in functions were more like interpreted functions in this regard, all these problems would go away.
There are two ways to "bind" a built-in function to an object.
One would be to do what happens for Python functions, which is in effect a currying: f.get(obj) yields a function g that when called as g(arg1, ...) calls f(obj, arg1, ...). (In fact, I've recently checked in a change that makes instancemethod a general currying function on the first argument. :-)
But the other interpretation, which might be more appropriate for C functions, is that the bound instance is passed to the first argument at the C level, usually called self:
PyObject * my_c_function(PyObject *self, PyObject *args) { ... }
Which one would you like? I think we could do each rather easily (perhaps the first more easily because the type needed to represent the bound method already exist; for the second I think we'd have to introduce a new helper object type).
--Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] CALL_ATTR patch (was: 2.3b1 release)
- Next message: [Python-Dev] CALL_ATTR patch (was: 2.3b1 release)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]