On Dec 6, 2006, at 4:20 AM, Jan Grant wrote: > On Mon, 4 Dec 2006, Bill Janssen wrote: >> Jim Jewett writes: ... >>> (1) Interfaces can be placed on a separate (presumably light- >>> weight) >>> inheritance hierarchy. ... >> And I don't really >> see how it's lighter-weight -- can you explain that? ... > Interfaces describe types: they are contracts.
Yes. I like Jan's (longer :-) reply. Compared to ABCs, interfaces can also describe contracts that can be fulfilled with any object--not just class instances, but classes themselves, and functions. Callables are an easy real-world example. If an interface describes a callable object, the contract might be fulfilled by a function, a class, or an interface. In Zope 3, we do that, often for factories, where the implementation choice might depend on simplicty of implementation, configuration options, and so on. The ability to slam on an interface to an instance is another important difference: specific instances can fulfill contracts that all instances of the same class do not necessarily fulfill. Other examples are perhaps more theoretical--with classmethods, a class can fulfill a contract that we'd normally expect to be met with an instance. I've used interfaces to describe a contract that a class fulfills via classmethods, but I can't recall I really expected the contract to be possibly fulfilled as an instance (though it certainly could). I'm not sure that Jan and I are actually addressing what Jim Jewett intended to convey in his description of a "light-weight" interface hierarchy. This is more a general flexibility of the interface approach in comparison to ABCs. But the flexibility is very useful, in my experience, and the concept of a "contract"--including the politically correct notion that you shouldn't have preconceived notions of who can fulfill the contract--describes (Zope 3) interfaces well. Gary _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com