[Python-Dev] PEP 246: lossless and stateless (original) (raw)

Phillip J. Eby pje at telecommunity.com
Fri Jan 14 18:36:12 CET 2005


At 04:39 PM 1/14/05 +0000, Armin Rigo wrote:

Ideally, both the caller and the callee know (and write down) that the function's argument is a "reference to some kind of file stuff", a very general concept; then they can independently specify which concrete object they expect and provide, e.g. "a string naming a file", "a file-like object", "a string containing the data".

Yes, exactly! That's what I mean by "one use case, one interface". But as you say, that's because we don't currently have a way to separate these ideas.

So, in developing with PyProtocols, I create a new interface for each concept, possibly allowing adapters for some other interface to supply default implementations for that concept. But, for things like strings and such, I define direct adapters to the new concept, so that they override any "generic" adapters as you call them.

So, I have a path that looks like:

concreteType -> functionalInterface -> conceptInterface

Except that there's also a shorter concreteType -> conceptInterface path for various types like string, thus providing context-sensitivity. (Interestingly, strings are the most common instance of this situation, as they're one of the most "open to interpretation" objects you can have!)

> It also works for the module to define a target interface and register an > adapter to that, and introduces less complexity into the adaptation system.

Makes sense, but my fear is that people will soon register generic adapters all around... debugging nightmares!

Well, if you have "interface per concept", you have a context; the context is the concept itself.



More information about the Python-Dev mailing list