Voluntary Abstract Base Classes - Python

This is a discussion on Voluntary Abstract Base Classes - Python ; 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/viewpo...?thread=208549 where he mentions ABC's but don't quite understand what the whole story is about. Anyone has good use cases? Daniel...

+ Reply to Thread
Results 1 to 2 of 2

Voluntary Abstract Base Classes

  1. Default Voluntary Abstract Base Classes

    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/viewpo...?thread=208549 where he
    mentions ABC's but don't quite understand what the whole story is
    about.

    Anyone has good use cases?

    Daniel

  2. Default Re: Voluntary Abstract Base Classes

    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/viewpo...?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

+ Reply to Thread

Similar Threads

  1. Re: Voluntary Abstract Base Classes
    By Application Development in forum Python
    Replies: 0
    Last Post: 06-29-2007, 02:13 PM
  2. Re: Voluntary Abstract Base Classes
    By Application Development in forum Python
    Replies: 0
    Last Post: 06-29-2007, 01:37 PM
  3. ABCs (abstract base classes) and linkage problems
    By Application Development in forum c++
    Replies: 4
    Last Post: 06-03-2007, 03:54 PM
  4. Replies: 0
    Last Post: 03-05-2007, 01:24 PM
  5. Layout of base classes within derived classes
    By Application Development in forum c++
    Replies: 19
    Last Post: 01-17-2007, 11:17 AM