[Python-Dev] PEP 246, redux (original) (raw)
Michael Chermside mcherm at mcherm.com
Tue Jan 11 19:47:13 CET 2005
- Previous message: [Python-Dev] Re: logging class submission
- Next message: [Python-Dev] PEP 246, redux
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I wrote:
>... but in my world, half the time I'm using adaptation to >correct for the fact that someone else's poorly-written >code requests some class where it should have just used >an interface.
Phillip replies:
PEP 246 adaptation? Or are you talking about some other language? (I ask out of curiosity.)
Well, it's partly just a rhetorical device here. I mean PEP 246 adaption, but (unlike you!) I'm not actually using it yet (aside from playing around to try things out), really I'm just guessing how I WOULD be using it if it were part of core python.
I agree that if it's possible to adapt to concrete types, people will do so. However, I think we all agree that this isn't a great idea and should still be considered bad style.
I'd agree except for the case where I am trying to pass an object into code which is misbehaving. If we do add type declarations that trigger an adapt() call, then people WILL write poor code which declares concrete types, and I will find myself writing conform methods to work around it. In this case, I'm the one making use of adaption (the original author was just expecting a TypeError), but what I'm doing isn't (IMO) bad style.
>You seem to inhabit a world in which transitivity of adaptation >can be enforced. But in my world, people occasionally misuse >adaptation because they think they know what they're doing >or because they're in a big hurry and it's the most convenient >tool at hand.
How is this different from abuse of any language feature that you're then forced to work around? Are you saying we should not provide a feature because some people will abuse the feature? I don't understand.
If we're just recomending that people design for transitivity, then I don't have a problem (although see Alex's fairly good point illustrated with LotsOfInfo, PersonName, and FullName -- I found it convincing). But I was under the impression that the point of transitivity was to make it "required", then automatically walk chains of adaptions. Then I fear one case of mis-used adaption could "poison" my entire adaption mechanism. The N^2 explosion of pairwise-only adapters scares me less, because I think in most real situations N will be small.
If you allow interface inheritance, you're just as susceptible to an invalid adaptation path, and in my experience this is more likely to bite you unintentionally, mainly because interface inheritance works differently than class inheritance (which of course is used more often). Do you want to prohibit interface inheritance, too?
Hmm. Sounds like you're making a point here that's important, but which I don't quite get. Can you elaborate? I certainly hadn't intended to prohibit interface inheritance... how exactly does it "bite" one?
-- Michael Chermside
- Previous message: [Python-Dev] Re: logging class submission
- Next message: [Python-Dev] PEP 246, redux
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]