On Apr 14, 4:09 am, Steven D'Aprano <ste...@remove.this.cybersource.com.au> wrote: > I have a subclass of int where I want all the standard arithmetic > operators to return my subclass, but with no other differences: > > class MyInt(int): > def __add__(self, other): > return self.__class__(super(MyInt, self).__add__(other)) > # and so on for __mul__, __sub__, etc. > > My quick-and-dirty count of the __magic__ methods that need to be over- > ridden comes to about 30. That's a fair chunk of unexciting boilerplate. >
Something like this maybe? def takesOneArg(fn): try: fn(1) except TypeError: return False else: return True class MyInt(int): pass template = "MyInt.__%s__ = lambda self, other: self.__class__(super (MyInt, self).__%s__(other))" fns = [fn for fn in dir(int) if fn.startswith('__') and takesOneArg (getattr(1,fn))] print fns for fn in fns: exec(template % (fn,fn)) Little harm in this usage of exec, since it is your own code that you are running. -- Paul -- http://mail.python.org/mailman/listinfo/python-list