Alex Martelli <[EMAIL PROTECTED]> wrote: > Consider __index__, and a user of gmpy,
Jim Jewett wrote: > So the adaptation would be > > def gmpy_mpz_index(self): > return long(self) > gmpy.mpz.__index__=gmpy_mpz_index > > Monkeypatching someone else's class may not be pretty, but adaptation > is basically a standing offer to (less efficiently) pretend you did. No, monkey patching isn't pretty, thankfully that's not how it works. To express that use case with Zope 3 adaptation you'd want an IIndex interface that (say) promises to have a .index() method, if you want to get an index from a gmpy value, you'd adapt it like so, and call the method: IIndex(gmpy_value).index() It's a design decision as to weather a particular method wants just an index passed in, wants something that already conforms to the IIndex interface (which is really duck typing, in Z3 we don't enforce interfaces), or something that is adaptable to IInterface. So, if I wanted to use gmpy.mpz objects as indices and there isn't an appropriate adapter, I can define my own. If the gmpy project then added an .index() method to mpz objects and flagged them as providing IIndex, my adapter wouldn't be necessary any more (because adapting something to an interface that it already provides returns the original object). Alternately they could provide their own adapter, and I could stop using mine. -- Benji York _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
