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")