]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/lib/subclass.py
Switch from using Decimal to using a new Currency class
[bluechips.git] / bluechips / lib / subclass.py
1 """
2 Create subclasses that call out to their "superclass" for all methods
3 but return the "subclass's" type
4 """
5
6 def wrapper(c, func):
7     return (lambda self,*args: c(getattr(self.value, func)(*map(self.value.__class__, args))))
8
9 class SmartSubclass(object):
10     def __init__(self, superclass, exclude=[]):
11         self.superclass = superclass
12         self.exclude = exclude
13     def __call__(self, name, bases, dict):
14         c = type(name, bases, dict)
15         for func in dir(self.superclass):
16             if func not in dir(c) and \
17                 callable(getattr(self.superclass, func)) and \
18                 func not in self.exclude:
19                 setattr(c, func, wrapper(c, func))
20         return c
21
22 __all__ = ['SmartSubclass']