Tim Hochberg wrote: > Guido van Rossum wrote: > >> On 4/5/06, Tim Hochberg <[EMAIL PROTECTED]> wrote: >> >> >>> Walter Dörwald wrote: >>> >>> >>>> What's still missing IMHO is a way for an adapter to defer to the next >>>> adapter in the chain, i.e. something like: >>>> >>>> >> [...] >> >> >>> The concept seems good, but I find the implementation baffling, OK, I >>> finally figured it out. It only seems to work once though -- you can't >>> chain super calls. Why not simply raise a DeferToNextAdapter exception? >>> >>> >> I haven't used adapters in years, and I don't recall seeing this in >> Alex's recent posts; can either of you explain slowly what the use >> case is and how it's typically used? The code fragments shown so far >> aren't helping. :-( >> >> > I'm hoping that Walter can give some more realistic examples since I > don't have real-world experience here. The basic idea is simply to let > an adapter give up and let the protocol try the next adapter. This could > happen in a generic function, for instance, if you wanted to try some > fast algorithm for some specific subtypes, but the algorithm might be > inappropriate depending on the values of the subtypes. You don't find > that out till your in the adapter itself.
What I had in mind was something like this for an extensible repr(): xrepr = Protocol("xrepr") @xrepr.register(list) def xrepr_list(obj): return "[%s]" % ", ".join(xrepr(x) for x in obj) class MyList(list): ... @xrepr.register(MyList) def xrepr_MyList(obj): return "MyList(%s)" % xrepr.super(obj) Servus, Walter > This uses Nick Coghlan's GenericFunction implementation from a few posts > ago with the DeferToNextAdapter stuff added. But raising a exception ends the execute of the adapter there. I can't use the result of the super adapter. Servus, Walter _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com