Implement logic on object.attribute and object.attribute()

Marc Aymerich glicerinu at gmail.com
Sun Nov 24 09:34:02 EST 2013


On Sun, Nov 24, 2013 at 3:13 PM, Chris Angelico <rosuav at gmail.com> wrote:
> On Mon, Nov 25, 2013 at 12:45 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
>> 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 Magic_HTTP_Thing:
>>     @property
>>     def attribute(self):
>>         result = CallableStr(self.do_get())
>>         result.function = lambda: self.do_put()
>
> Problem with that is that it'll still call do_get immediately. You'd
> have to somehow defer this call until it's actually _used_, which is
> why I dropped a mention of "converting to str?" - which would
> presumably be a __str__ method. But I still don't like the API.

That's right.
In my case deferring the GET call will not be a problem since this
objects will be used in just a few particular places and the workflow
is always something like:

# Initiate firmware building
node.ctl.firmware()
# wait until finished
while node.ctl.firmware.progress < 100:
   time.sleep(1)


Thanks for sharing your knowledge guys !!
-- 
Marc



More information about the Python-list mailing list