Armin Rigo <arigo at tunes.org> writes: > ... is that the __adapt__() and __conform__() methods should work just > like all other special methods for new-style classes. The confusion > comes from the fact that the reference implementation doesn't do that. > It should be fixed by replacing: > > conform = getattr(type(obj), '__conform__', None) > > with: > > for basecls in type(obj).__mro__: > if '__conform__' in basecls.__dict__: > conform = basecls.__dict__['__conform__'] > break > else: > # not found > > and the same for '__adapt__'. > > The point about tp_xxx slots is that when implemented in C with slots, you get > the latter (correct) effect for free. This is how metaconfusion is avoided in > post-2.2 Python. Using getattr() for that is essentially broken. Trying to > call the method and catching TypeErrors seems pretty fragile -- e.g. if you > are calling a __conform__() which is implemented in C you won't get a Python > frame in the traceback either. I'm confused. Do you mean that getattr(obj, "somemethod")(...) does something different than obj.somemethod(...) with new style class instances? Doesn't getattr search the __dict__'s along the __mro__ list? Thomas
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