'Call the overloaded function.'

def __call__(self, *args):

    types = tuple(map(type, args))
    func = self.cache.get(types)
    if (func is None):
        self.cache[types] = func = self.find_func(types)
    return func(*args)
