Injecting methods into instance / class
On 02/12/2018 18:56, duncan smith wrote:
> 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.
> 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.