【发布时间】:2016-08-27 23:27:34
【问题描述】:
我想创建一个代理类来包装int 以进行线程安全访问。与内置类型相比,代理类是可变的,因此它可以就地递增。现在,我想将该类用作外部的普通整数。通常,Python 的__getattr__ 可以很容易地将属性访问转发到内部对象:
class Proxy:
def __init__(self, initial=0):
self._lock = threading.Lock()
self._value = initial
def increment(self):
with self._lock:
self._value += 1
def __getattr__(self, name):
return getattr(self._value, name)
但是,__getattr__ does not get triggered for magic methods 像 __add__、__rtruediv__ 等,我需要代理像整数一样工作。有没有办法自动生成这些方法,或者将它们转发给包装的整数对象?
【问题讨论】:
-
@IljaEverilä 我知道为什么
__getattr__对此不起作用,这不是我的问题要问的。我正在寻求一种生成或以其他方式转发方法的方法。因此,如果您想以这种方式查看,则可以使用一种解决方法。 -
@VPfB。链接似乎死了。你有更新的版本,或者至少有帖子的标题吗?
-
@MadPhysicist 不幸的是,没有,但我找到了保存的副本。链接是
http://web.archive.org/web/20160516220457/http://yauhen.yakimovich.info/blog/2011/08/12/wrapping-built-in-python-types/
标签: python python-3.x proxy