gpt4 book ai didi

python - weakref.proxy 和 weakref.ref 之间的区别?

转载 作者:行者123 更新时间:2023-12-05 02:15:33 26 4
gpt4 key购买 nike

来自 documentation :

Weakref.proxy returns a proxy to object which uses a weak reference. But if I run the following code:

obj = SomeObj()
obj # <__main__.ExpensiveObject at 0xbfc5390>
p = weakref.proxy(obj)
r = weakref.ref(obj)

r() # <__main__.ExpensiveObject at 0xbfc5390>
# the weakreference gives me the same object as expected
p # <__main__.ExpensiveObject at 0xc456098>
# the proxy refers to a different object, why is that?

任何帮助将不胜感激!谢谢!

最佳答案

您正在使用 IPython,它有自己的 pretty-print 工具。 default pretty-printer更喜欢通过 __class__ 而不是 type 来检查对象的类:

def _default_pprint(obj, p, cycle):
"""
The default print function. Used if an object does not provide one and
it's none of the builtin objects.
"""
klass = _safe_getattr(obj, '__class__', None) or type(obj)
if _safe_getattr(klass, '__repr__', None) is not object.__repr__:
# A user-provided repr. Find newlines and replace them with p.break_()
_repr_pprint(obj, p, cycle)
return
p.begin_group(1, '<')
p.pretty(klass)
...

但是 weakref.proxy 对象通过 __class__ 隐藏了它们的类,因此 pretty-print 认为代理确实是 ExpensiveObject 的一个实例.它看不到代理的 __repr__,并将类打印为 ExpensiveObject 而不是 weakproxy

关于python - weakref.proxy 和 weakref.ref 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com