On Sun, 03 Aug 2008 02:44:34 -0700, Victor Lin wrote: > Now, here comes the problem : I have to override all the operation > methods, such as __add__ and __mul__. I know the most stupid way is just > to write all of them like this. > > def __add__(self, other): > self.leftOperation('add', other) > > def __mul__(self, other): > self.leftOperation('mul', other) > > But I don't want to do that in this stupid way. I want to use little > code to redirect these operation methods to some specific method with > it's name. > > What can I do?
I usually dislike code that uses exec, but this is one place where I'm tempted to make an exception (mainly because I can't think of an alternative). Untested and at your own risk: def factory(name): """Return a method name and a function.""" def func(self, other): return self.LeftOperation(name, other) return "__%s__" % name, func class Parrot(object): for name in ["mul", "add", "sub", "pow"]: # and many more... name, f = factory(name) exec "%s = f" % name del name, f Urrggh. I feel dirty. *wink* -- Steve -- http://mail.python.org/mailman/listinfo/python-list