Daniel Nogradi wrote:
> Hi list,
> 
> Well, the short question is: what are they? I've read Guido's python
> 3000 status report on
> http://www.artima.com/weblogs/viewpost.jsp?thread=208549 where he
> mentions ABC's but don't quite understand what the whole story is
> about.
> 
> Anyone has good use cases?
> 
> Daniel

My interpretation of his description is that this is a way to check for 
quack likes a duck behavior.

Say I want a function to check if something behaves like a slice, but 
don't want to resort to checking for explicit inheritence, I might now 
have to do something like (factoring out the checking):


def is_slice_like(candidate):
   for att in 'start', 'stop', 'step', 'indices':
     if not hasattr(candidate, att):
       return False
   return True

def doit(anarg):
   if not is_slice_like(anarg):
     raise Exception, 'Must give something like a slice.'
   do_rest_of_it()


However, with an ABC, you could define what it means to be slice-like by 
defining a slice-like ABC (e.g. SliceLike) and then virtually inheriting 
from this ABC:


# assuming abstract inheritence syntax is the same as regular
class MySlice(SliceLike):
   # etc.

def doit(anarg):
   if not issubclass(anarg.__class__, SliceLike):
     raise Exception, 'Must give something SliceLike.'

def main():
   anarg = MySlice(1,2,3)
   doit(anarg)


With ABCs, the concept of slice-like is more formalized and transparent 
than the attribute checking done in is_slice_like and is far more 
flexible than explicit type checking.

The concept seems to be borrowed from Java interfaces.

But I'm ready to be corrected on my interpretation.

James
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to