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