[Python-3000] Abilities / Interfaces
Phillip J. Eby
pje at telecommunity.com
Wed Nov 22 16:45:40 CET 2006
At 11:16 AM 11/22/2006 -0200, Gustavo Niemeyer wrote:
>I've lost you here. As I understand interfaces, their most important
>feature is indeed being a "comment in the form of code", and I hope
>they continue to be that way.
What does it add to have to declare a class as being "Iterable", if it
already implements __iter__? What does the notion of "Iterable" add to the
execution *or* understanding of the code?
If you say that it is because having "Iterable" is needed to distinguish
different possible interpretations of the same method name(s), then why not
just have method namespaces to begin with?
"defop" is one way to do that, of course, but there could easily be others,
like a "namespace" statement inside of classes that would contain the
method definitions.
I'd like to try to meet the needs, without assuming that "interfaces" are
the right answer. Indeed, if interfaces are considered the answer, I want
to know what the question is. :) Many years ago, I helped to create
Zope's interface adaptation system, and I built PyProtocols as well, using
interfaces quite extensively in PEAK. So, I am familiar with the presumed
benefits of interfaces as well as their drawbacks -- especially their
drawbacks. And chief amongst those drawbacks are complexity and
duplication.
In essence, interfaces turn libraries into "frameworks", but generic
functions turn frameworks into libraries. I didn't really discover this
until January of last year, though, when I did some experiments in
replacing various PEAK interfaces with generic functions:
http://dirtsimple.org/2005/01/like-acid-for-frameworks.html
The experience of refactoring was what made me realize that generic
functions weren't just for obscure fancy use cases like security rules and
binary math operators. They *gutted* my interface-based code down to
nothing -- hence my description of them as being "like acid for frameworks".
More information about the Python-3000
mailing list