Delegator.py 831 Bytes
Newer Older
David Scherer's avatar
David Scherer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Delegator:

    # The cache is only used to be able to change delegates!

    def __init__(self, delegate=None):
        self.delegate = delegate
        self.__cache = {}

    def __getattr__(self, name):
        attr = getattr(self.delegate, name) # May raise AttributeError
        setattr(self, name, attr)
        self.__cache[name] = attr
        return attr

    def resetcache(self):
16
        for key in self.__cache:
David Scherer's avatar
David Scherer committed
17 18 19 20 21 22 23
            try:
                delattr(self, key)
            except AttributeError:
                pass
        self.__cache.clear()

    def cachereport(self):
24
        keys = list(self.__cache.keys())
David Scherer's avatar
David Scherer committed
25
        keys.sort()
26
        print(keys)
David Scherer's avatar
David Scherer committed
27 28 29 30 31 32 33

    def setdelegate(self, delegate):
        self.resetcache()
        self.delegate = delegate

    def getdelegate(self):
        return self.delegate