This is straight from the library (xml.sax.saxutils) [chosen more because so at least it's real code than because nobody can argue that it is irrelevant. I find fascinating how much powerful is the argument "nobody does that often" in discussions about language design] def prepare_input_source(source, base = ""): """This function takes an InputSource and an optional base URL and returns a fully resolved InputSource object ready for reading.""" if type(source) in _StringTypes: source = xmlreader.InputSource(source) elif hasattr(source, "read"): f = source source = xmlreader.InputSource() source.setByteStream(f) if hasattr(f, "name"): source.setSystemId(f.name) ... the first problem is the "ontology" problem and how much we want to support someone who want to strictly check (a) "source has intentionally a file-like read" vs. just (b) "source has some read method"... This is indipendent of whether we have adapt or declarative interfaces or both. The above could be written as: source = adapt(source,xmlreader.InputSource) moving the code inside xmlreader.InputSource.__adapt__ . But does this address (a)? I would say no. Then one could simply not implement __adapt__ but leave the burden to the users to define my-type-with-a-good-read to xmlreader.InputSource adaptations. Or put code the code inside xmlreader.InputSource.__adapt__ and susbitute elif hasattr(source, "read"): with f = adapt(source,???) so the "ontology" problem is back. My point is not against adaptation, but that adaptation does not automagically solve all our problems without further thinking. I repeat, with both adaptation and interfaces, if one cares about contracts vs. just signatures, the ontology problem is with us. Adaptation is probably expressive enough. But the choice between (I) - mechanisms to ask and declare whether object implements protocol - mechanisms to register adapter factories between protocol A and B [I think this is Zope3 model] or (II) - just adaptation should be a choice also about convenience, readability, ... both ways the ontology problem is there. regards.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4