Voluntary Abstract Base Classes

Discussion in 'Python' started by Daniel Nogradi, Jun 29, 2007.

  1. Daniel Nogradi, Jun 29, 2007
    #1
    1. Advertising

  2. Daniel Nogradi

    James Stroud Guest

    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
     
    James Stroud, Jun 29, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. DaKoadMunky
    Replies:
    4
    Views:
    553
    Lee Weiner
    Apr 20, 2004
  2. Nick
    Replies:
    20
    Views:
    769
  3. John Gagon
    Replies:
    1
    Views:
    369
    LordAlfredHenry
    May 17, 2006
  4. Ben Finney

    Abstract Base Classes

    Ben Finney, Nov 11, 2005, in forum: Python
    Replies:
    6
    Views:
    407
    Steven D'Aprano
    Nov 14, 2005
  5. pasa_1
    Replies:
    1
    Views:
    327
    mlimber
    Nov 17, 2006
Loading...

Share This Page