[Zope-dev] Defining Interfaces

Chris Withers chrisw@nipltd.com
Tue, 29 Jan 2002 11:30:48 +0000


Steve and Jeff,

Thanks for the great explanations :-)

Now I'm curious about Python 2.2 and classes with static methods...

cheers,

Chris

Jeffrey P Shell wrote:
> 
> On 1/28/02 8:17 AM, "Chris Withers" <chrisw@nipltd.com> wrote:
> 
> > Jeffrey P Shell wrote:
> >>
> >> On 1/27/02 11:25 AM, "Steve Alexander" <steve@cat-box.net> wrote:
> >>
> >>> Hi folks,
> >>>
> >>> When I define an Interface, are the methods of the interface supposed to
> >>> have "self" as the first argument?
> >>
> >> No.
> >
> > Can you expand on this a little?
> >
> > It doesn't make sense to me to exclude 'self'...
> 
> Jim [Fulton] explained it to me once.  He can explain it better than I can.
> But think of it this way -- theoretically, an interface can be implemented
> by a folder full of Python scripts as [relatively] easily as it can be
> implemented by a class.  Should you then include all of the binding options
> (context, container, etc)?
> 
> 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?
> 
> An interface defines a contract on the usage of an object/component; it's
> not necessarily a specification on how to implement it.  The concept of
> 'self' as the first argument for instance methods is a product of
> implementing in a Python class (not to mention that 'self' is not a required
> name, just an extremely common convention.  You could use 'this' just as
> easily).
> 
> The big theory behind most component models is that the implementation
> shouldn't matter so long as certain interfaces are satisfied.  And the
> following simple interface could be satisfied a number of ways in Zope
> already - by a normal Python class implementation; by a folder with a Python
> Script or External Method; by a ZClass with the same; or (in Python 2.2) by
> a class with a static method (which would have no 'self').
> 
> class ISubscriber(Base):
>     """ Subscriber base interface """
>     def EventService_inform(event):
>         """ Informs the subscriber that the event has occurred """
> 
> --
> Jeffrey P Shell
> www.cuemedia.com