Armin Rigo <[EMAIL PROTECTED]> 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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com