LT='<' GT='>' EQ='==' class Comparison(object): def __init__(self, left=None, type=EQ, right=None): self.left = left self.type = type self.right = right def __str__(self): return '%r %s %r' % (self.left, self.type, self.right) class Variable(object): def __init__(self, name=None): self.name = name self.constraints = [] def __str__(self): if self.name: ret = '%s:\n' % self.name else: ret = 'Unknown:\n' for constraint in self.constraints: ret += '\t%s\n' % constraint return ret def __repr__(self): if self.name: return self.name else: return 'Variable()' def __lt__(self, right): self.constraints.append(Comparison(left=self, type=LT, right=right)) return True def __gt__(self, right): self.constraints.append(Comparison(left=self, type=GT, right=right)) return True def __eq__(self, right): self.constraints.append(Comparison(left=self, type=EQ, right=right)) return True def Synesthesia(func): args = [Variable(func.func_code.co_varnames[i]) for i in range(func.func_code.co_argcount)] func(*args) for arg in args: print arg return None