On 02/12/2018 18:56, duncan smith wrote: > Hello, > I have a lot of functions that take an instance of a particular > class as the first argument. I want to create corresponding methods in > the class. I have tried the following, which (when called from __init__) > creates the relevant methods in an instance (Python 3.6).
As it sounds like you're creating the classes you want these methods in yourself, how about using good old-fashioned inheritance instead? > def init_methods(self): > for func_name, method_name in [('add', '__add__'), > ('subtract', '__sub__')]: > setattr(self, method_name, > types.MethodType(globals()[func_name], self)) > > > The problem is that e.g. > > x.__sub__(y) > > works as expected, but > > x - y > > does not (because special methods are looked up in the class rather than > the instance). > > I have tried to find examples of injecting methods into classes without > success. I have tried a few things that intuition suggested might work, > but didn't - like removing the first line above, dedenting and replacing > self with the class. This is only to save typing and make the code > cleaner, but I would like to get it right. Any pointers appreciated. TIA. > > Duncan > -- https://mail.python.org/mailman/listinfo/python-list