Benjamin Peterson wrote: > 2009/5/8 Daniel Stutzbach <daniel at stutzbachenterprises.com>: >> On Fri, May 8, 2009 at 6:14 PM, Benjamin Peterson <benjamin at python.org> >> wrote: >>> Normally special methods use slots of the PyTypeObject struct. >>> typeobject.c looks up all those methods on Python classes correctly. >>> In the case of __enter__ and __exit__, the compiler generates bytecode >>> to look them up, and that bytecode use PyObject_Getattr. >> Would this problem apply to all special methods that don't use a slot in >> PyTypeObject, then? I know of several other examples: > > Yes. I didn't think of those. > >> __reduce__ >> __setstate__ >> __reversed__ >> __length_hint__ >> __sizeof__ >> >> (unless I misunderstand the definition of "special methods", which is >> possible) __reversed__, at least, is called by the reversed() builtin, so there is no LOAD_ATTR k (__reversed__) byte code. So for that, the problem is reduced to accessing type(it).__reversed__ without going thru type(it).__getattribute__. I would think that a function that did that would work for the others on the list (all 4?) that also have no LOAD_ATTR bytecode. Would a modified version of object.__getattribute__ work? tjr
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4