You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Kivy弱引用是否指向指定对象?

判断原对象是否在弱引用列表中的解决方案

这个问题我之前处理Kivy触摸事件时也碰到过,确实因为grab_list里存的是弱引用对象,和原控件实例不是同一个实体,直接用if my_obj in my_list:肯定会返回False。给你几个实用的解决办法:

方法1:用any()遍历并解引用判断

这是最直接的单次判断方式,遍历列表里的每个弱引用,调用ref()获取原对象后用is做身份匹配:

if any(ref() is my_obj for ref in my_list):
    print("my_obj在grab_list里!")

如果担心对象已经被GC回收(此时ref()会返回None),可以加上非空判断避免误判:

if any(ref() is not None and ref() is my_obj for ref in my_list):
    print("my_obj存在且在grab_list里!")

方法2:转换为原对象集合(适合多次判断)

如果需要多次检查不同对象是否在列表里,先把有效弱引用转换成原对象的集合,后续判断会更高效:

# 先过滤掉已被回收的对象,生成原对象集合
active_grabbed_objects = {ref() for ref in my_list if ref() is not None}

# 之后直接用in判断
if my_obj in active_grabbed_objects:
    # 执行你的逻辑

额外提示

因为弱引用的特性,一定要注意:如果原对象已经被Python的垃圾回收机制回收,ref()会返回None,所以在判断时最好先确认ref()不为空,避免把None当成有效对象处理。

内容的提问来源于stack exchange,提问作者Snow bunting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:55:22