On Fri, Jan 14, 2005 at 12:30:17AM +1000, Nick Coghlan wrote: | Anyway, I'd like to know if the consensus I think you've reached is the | one the pair of you think you've reached :)
This stated position is not the current PEP status, and it's not a concensus position I share. | That is, with A being our starting class, C being a target class, and F | being a target interface, the legal adaptation chains are: | # Class to class | A->C | # Class to interface, possibly via other interfaces | A(->F)*->F PEP246 should not talk about legal or illegal adaption chains, all adaption chains should be explicit, and if they are explicit, the programmer who specified them has made them legal. | With a lookup sequence of: | 1. Check the global registry for direct adaptations | 2. Ask the object via __conform__ | 3a. Check using isinstance() unless 2 raised LiskovViolation | 3b. Nothing, since object.__conform__ does an isinstance() check | 4. Ask the interface via __adapt__ These are OK up to 4. | 5. Look for transitive chains of interfaces in the global registry. No! No! No! Perhaps... 5. Raise a AdaptionFailed error, which includes the protocol which is being asked for. This error message _could_ also include a list of possible adaptation chains from the global registry, but this is just a suggestion. | 3a & 3b are the current differing answers to the question of who should | be checking for inheritance - the adaptation machinery or the __conform__ | method. Correct. I think either method is OK, and perfer Phillip's approach. Best, Clark -- Clark C. Evans Prometheus Research, LLC. http://www.prometheusresearch.com/ o office: +1.203.777.2550 ~/ , mobile: +1.203.444.0557 // (( Prometheus Research: Transforming Data Into Knowledge \\ , \/ - Research Exchange Database /\ - Survey & Assessment Technologies ` \ - Software Tools for Researchers ~ * _______________________________________________ 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