包装Python的int/float对象

3 投票
2 回答
1304 浏览
提问于 2025-04-16 13:23

我正在开发一个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

撰写回答