Object-oriented URL loading and HTTP client with requests in Python
It makes sense to model the API like this if things are more
complicated, e.g. ability to pass around requests and responses as
objects might come in handy.

The last example shows why this alone isn't that user-friendly though:
In addition to mentioning the specific request (with the Request
suffix always around) you also have to call the process method.

I'd suggest an additional wrapper to make things easier in the normal
case, i.e. have login function or method that does this for you.



The code as-is looks good to me with the exception of the process
method - firstly you can just write return r.json(), secondly the
exit call in there is ... questionable.  I most certainly wouldn't
want to have a library call that on my program ever.

A minor thing I've also noticed is that the subclasses of BaseRequest
can't override any values via the constructor.  I'm guessing that's
deliberate, I just usually expect to be able to do that (so in the base
class call self.headers.update(headers) instead of the other way
round).