def __call__(self, **kwargs):
    print(self.method_name, kwargs)


class Client(object):

    def __getattr__(self, key):
        return Method(self, key)
Overriding __getattr__ to support dynamic nested attributes