[Python-Dev] PEP 246, redux
Clark C. Evans
cce at clarkevans.com
Tue Jan 11 19:50:20 CET 2005
On Tue, Jan 11, 2005 at 12:54:36PM -0500, Phillip J. Eby wrote:
| * Replacing LiskovViolation is possible by dropping type/isinstance
| checks from adapt(), and adding an isinstance check to
| object.__conform__; Liskov violators then override __conform__ in their
| class to return None when asked to conform to a protocol they wish to
| reject, and return super().__conform__ for all other cases. This
| achieves your use case while simplifying both the implementation and the
| usage.
I'd rather not assume that class inheritance implies substitutability,
unless the class is "marked" as an interface (assuming that one
doesn't have interfaces). I'd like it to be explicit -- a bit of a
nudge to remind a developer to verify substitutability is a good
thing. In this scenerio, a LiskovViolation exception isn't needed
(aside, I don't see the rationale for the exception: to prevent
third party adapters?). Could we make a boilerplate __conform__
which enables class-based substitutability a well-known decorator?
| * In my experience, incorrectly deriving an interface from another is the
| most common source of unintended adaptation side-effects, not adapter
| composition
It'd be nice if interfaces had a way to specify a test-suite that
could be run against a component which claims to be compliant. For
example, it could provide invalid inputs and assert that the proper
errors are returned, etc.
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