[Python-Dev] PEP 246, redux
Clark C. Evans
cce at clarkevans.com
Wed Jan 12 20:57:11 CET 2005
On Wed, Jan 12, 2005 at 10:16:14AM -0800, Guido van Rossum wrote:
| But now, since I am still in favor of automatic "combined" adaptation
| *as a last resort*, I ask you to consider that Python is not C++, and
| that perhaps we can make the experience in Python better than it was
| in C++. Perhaps allowing more control over when automatic adaptation
| is acceptable?
|
| For example, inteface B (or perhaps this should be a property of the
| adapter for B->C?) might be marked so as to allow or disallow its
| consideration when looking for multi-step adaptations. We could even
| make the default "don't consider", so only people who have to deal
| with the multiple A's and/or multiple C's all adaptable via the same B
| could save themselves some typing by turning it on.
How about not allowing transitive adaptation, by default, and
then providing two techniques to help the user cope:
- raise a AdaptIsTransitive(AdaptationError) exception when
an adaptation has failed, but there exists a A->C pathway
using an intermediate B
- add a flag to adapt, allowTransitive, which defaults to False
This way new developers don't accidently shoot their foot off, as
Alex warns; however, the price for doing this sort of thing is cheap.
The AdaptIsTransitive error could even explain the problem with a
dynamic error message like:
"You've tried to adapt a LDAPName to a FirstName, but no
direct translation exists. There is an indirect translation
using FullName: LDAPName -> FullName -> FirstName. If you'd
like to use this intermediate object, simply call adapt()
with allowTransitive = True"
Clark
More information about the Python-Dev
mailing list