On Monday 03 November 2008 00:48:20 Terry Jones wrote:
I just posted a blog article with title as above: http://bit.ly/1whZUK
I'm going to jump in. How about this: from twisted.internet import defer, reactor def aFuncReturningADeferred(value): d = defer.Deferred() reactor.callLater(5, d.callback, value[::-1]) return d class Foo(object): def __new__(cls, value): def cb(x): obj = object.__new__(cls, x) obj.__init__(x) return obj return aFuncReturningADeferred(value).addCallback(cb) def __init__(self, value): self.value = value def printFoo(obj): print obj.value reactor.stop() d = Foo("Some value") d.addCallback(printFoo) reactor.run() Instead of returning a deferred from the __init__ method (which is non-standard), you return it from __new__ It's clearer, since __init__ is meant for configuring instances, and __new__ for instantiating objects. Cheers.