包装Python int / float对象

时间:2011-03-09 23:02:53

标签: python concurrency metaprogramming

我正在研究一个Python并发框架(我知道,YACF),并且希望能够将变量作为Futures返回,但没有用户注意到它。

现在我正在做:

x = someAsyncMethod(args)
print "Return value is %d" % x.get_value( )

因为该方法返回一个Future对象,但我希望它是:

x = someAsyncMethod(args)
print "Return value is %d" % x

但是仍然调用了x的.get_value()。因此我想代理包装包含int的Python对象。像__get__这样的东西,但是如果ProxyInt是int的代理,我做了:

x = ProxyInt(10)
print x

n = x

在执行“return 10”

之前,我的“__get__”方法会被调用并做一些魔术

2 个答案:

答案 0 :(得分:1)

>>> class I(object):
...   def __int__(self):
...     return 42
... 
>>> i = I()
>>> print '%d' % i
42
>>> class F(object):
...   def __float__(self):
...     return 3.14
... 
>>> f = F()
>>> print '%f' % f
3.140000
>>> class S(object):
...   def __str__(self):
...     return 'foo'
... 
>>> s = S()
>>> print s
foo

答案 1 :(得分:0)

您可以覆盖__getattr____getattribute__(您最需要的套房)来执行“魔术”,例如代理的第一次属性访问。