Consider the following wrapper:

```
class SomeClass:
    def __init__(arg1='default1', arg2='default2'):
        # initialize stuff

    def do_stuff(self):

class SomeClassWrapper:
    def __init__(arg1='default1', arg2='default2'):
        self.arg1 = arg1
        self.arg2 = arg2

    def doit(self):
        instance = SomeClass(arg1, arg2)
        instance.do_stuff()

```

`SomeClassWrapper` is there to delay instantiation of `SomeClass` objects and to abstract away the creation of a new instance every time `do_stuff()` needs to be performed.

`SomeClassWrapper` is initialized with the "template" required to later initialize `SomeClass` objects whose real life initialization list is much longer than in the example and subject to change as the project develops.

The goal is to reduce errors and maintenance burden by not having to manually retype the same argument list (including defaults) in `SomeClassWrapper.__init__()` that we already have in `SomeClass.__init__()`.

Is there a way, perhaps using the `inspect` module, to do something along the lines of the below?

```
class SomeClassWrapper:
    # syntax to say:
    #  __init__() should be the same as SomeClass.__init__()  
    #  the arguments should be stored in say self.kwargs

    def doit(self)
        instance = SomeClass(self.kwargs)
        instance.do_stuff()

```