On Sun, 24 Nov 2013 05:04:16 -0800, Devin Jeanpierre wrote: > On Sun, Nov 24, 2013 at 4:52 AM, Marc Aymerich <glicer...@gmail.com> > wrote: >> Hi, >> I'm playing with python internals to make objects behave like this: >> >> if I access to "object.attribute" I want to return the result of an >> HTTP GET request. However if i call "object.attribute()" I want an HTTP >> POST request to be executed. > > Uh oh. What you want is impossible. You cannot call an attribute without > first accessing it. :(
Not quite impossible. All you need is an object that behaves like a string, except it has a __call__ method. Here's a sketch of a solution, completely untested. class CallableString(str): # Like a string, but callable. def function(self): raise NotImplementedError( "this must be overridden on the instance" ) def __call__(self): return self.function() class Magic_HTTP_Thing: @property def attribute(self): result = CallableStr(self.do_get()) result.function = lambda: self.do_put() def do_get(self): # Do a HTTP GET request. return "Get stuff" def do_put(self): # Do a HTTP PUT request. return "Put stuff" Possible or not, it doesn't seem like a reasonable API to me. -- Steven -- https://mail.python.org/mailman/listinfo/python-list