Welcome, guest | Sign In | My Account | Store | Cart
class Base(object):
   def __init__(self, *args, **kwds):
       self.autosetup(self.__class__, [], **kwds)

   def setup(self, **kwds):
       pass

   def autosetup(self, cls, called, **kwds):
       for base in cls.__bases__:
           try:
               b = base.setup
           except AttributeError:
               pass
           else:
               if b not in called:
                   called = self.autosetup(base, called, **kwds)

       cls.setup(self, **kwds)
       called.append(cls.setup)
       return called

# Sample Usage
class A(Base):
   def setup(self, foo, **kwds):
       print "A",foo

class B(Base):
   def setup(self, blah, **kwds):
       print "B", blah

class C(B):
   def setup(self, blech, **kwds):
       print "C", blech

class D(A, C):
   def setup(self, frog, **kwds):
       print "D", frog

class E(C):
   pass

class F(D, E):
   def setup(self, toad, foo, frog, **kwds):
       print "F", foo, frog, toad

x = F(foo=1, blah=2, blech=3, frog=4, toad=5)

History