class OverloadMethod(object): functions = [] def __call__(self, *args, **kwargs): for function in self.functions: if len(args) == function.func_code.co_argcount: return function(*args) raise NotImplementedError
def overload(function): obj = sys._getframe(0).f_globals.get(function.__name__) if obj is None: obj = OverloadMethod() obj.functions.append(function) return obj
if __name__ == '__main__': @overload def foo(a): print a