[Zope-dev] Defining Interfaces

Jeffrey P Shell jeffrey@cuemedia.com
Wed, 30 Jan 2002 10:08:35 -0700


On 1/30/02 4:08 AM, "Toby Dickenson"
<tdickenson@devmail.geminidataloggers.co.uk> wrote:

> On Mon, 28 Jan 2002 16:37:16 -0700, Jeffrey P Shell
> <jeffrey@cuemedia.com> wrote:
> 
> Many convincing arguments, but somehow I am not persuaded.
> 
>> Or, if you were defining the interface in IDL (mmm,
>> almost-avoiding-redundancy through acronyms!) with the target language being
>> Python, would you include self?
> 
> But what if you were defining an interface as a Python class, with the
> target language being <anything except python>. Would you include
> self?

I'm saying that you wouldn't.  The point of IDL/ISL is that you wouldn't,
because the interface that you're specifying is independent of the target
language.

> I think my conclusion here is that using python classes to define
> interfaces may be counterproductive.

It may be the best we have (it's best understood by the target development
audience), unless PEP 245 [1] gets accepted into Python.  You can also
declare interfaces in a more declarative fashion, but I do have to say that
the class way is preferable.  Contrast::

>>> meths = {'sayHello': Interface.Method("Says hello to the user"),}
>>> IHello = Interface.new('IHello', [], meths)
>>> IHello.names()
['sayHello']

Is basically the same as:
>>> class IHello2(Interface.Base):
...   def sayHello():
...     "Says hello to the user"
... 
>>> IHello2.names()
['sayHello']

..[1] http://python.sourceforge.net/peps/pep-0245.html

-- 
Jeffrey P Shell 
www.cuemedia.com