包装Python的int/float对象
我正在开发一个Python的并发框架(我知道,这听起来很复杂),我希望能够把变量作为Future返回,但用户看不出来。
现在我做的是:
x = someAsyncMethod(args)
print "Return value is %d" % x.get_value( )
因为这个方法返回了一个Future对象,但我希望它能变成:
x = someAsyncMethod(args)
print "Return value is %d" % x
但我仍然希望能调用x的.get_value()。所以我想要一个代理来包装Python对象,包括整数。类似于__get__,但如果ProxyInt是int的代理,当我这样做的时候:
x = ProxyInt(10)
print x
或者
n = x
我的"__get__"方法会被调用,然后在返回"10"之前做一些魔法处理。
2 个回答
0
你可以重写 __getattr__
或 __getattribute__
这两个方法(根据你的需求选择一个)来实现一些“魔法”,比如在代理对象第一次访问某个属性时进行处理。
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