[Python-Dev] PEP 246, redux
Clark C. Evans
cce at clarkevans.com
Thu Jan 13 18:09:15 CET 2005
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
~ *
More information about the Python-Dev
mailing list