class BaseView(object):

    def __new__(cls, request, *args, **kwargs):
        self = object.__new__(cls)
        self.args = args
        self.kwargs = kwargs
        self.request = request
        self.__init__()
        return self.handle_request()

    def __init__(self):
        pass

    def handle_request(self):
        if self.request.method == "POST":
            return self.handle_post(*self.args, **self.kwargs)
        else:
            return self.handle_get(*self.args, **self.kwargs)

    def handle_get(self):
        raise NotImplementedError(self.handle_get)

    def handle_post(self):
        raise NotImplementedError(self.handle_post)


if __name__ == "__main__":
    class TestView(BaseView):

        def handle_post(self, value="foo"):
            return "post called with %r" % value


    class FakeRequest(object):
        method = "POST"
    req = FakeRequest()
    print TestView(req)
    print TestView(req, "bar")