I would like to do the following: given an instance of a Base class create an object of a Wrapper class that has all the methods and attributes of the Base class + some additional functionality.
class Base:
def __init__(self, *args, **kwargs):
self.base_param_1 = ...
# some stuff
def base_method_1(self, *args, **kwargs):
# some stuff
class Wrapper(...):
def __init__(self, cls_instance, *args, **kwargs):
self.wrapper_param_1 = ...
# some stuff
def wrapper_method_1(self, *args, **kwargs):
# some stuff
The use case is like the following:
wrapper_obj = Wrapper(Base(*base_args, **base_kwargs), *wrapper_args, *wrapper_kwargs)
The expected behavior is that one can access base_param_1, wrapper_param_1 and
base_param_1, base_param_2.
It is important that the fields of the Base class are the same in Wrapper (no copying).
I've seen that new functionality can be added in this way Adding a Method to an Existing Object Instance, but this approach has caveats and is not recommended.
Inheritance seems not to be an option here, since I am an already constructed object and this Wrapper can take different classes, despite with common Base.
EDIT
It is also required that Wrapper object is identified as Base instance.