Python:有没有办法知道一个类的实例是否已分配给一个变量?

扎眼的阳光 python 197

原文标题Python: Is there a way of knowing whether an instance of a class has been assigned to a variable?

我正在编写一个 Body2D 类,并且在__add__()magic 方法下我想知道该类的实例是否实际分配给了一个变量,或者它是否只是为了添加而创建的。

例如,我怎么能分辨这之间的区别:

earth = Body2D()
venus = Body2D()
mars = earth + venus

…其中两个第一个实例都与一个变量相关联,并且:

mars = Body2D() + Body2D()

?

我问的原因是因为我已经创建了迄今为止创建的所有对象的 ID 的类变量(列表),并且我不想存储尚未分配给变量的主体的 ID。

任何帮助将非常感激!谢谢!

原文链接:https://stackoverflow.com//questions/71522000/python-is-there-a-way-of-knowing-whether-an-instance-of-a-class-has-been-assign

回复

我来回复
  • ShadowRanger的头像
    ShadowRanger 评论

    这是不可能的。从您的类实例的角度来看,除了它们的引用计数未能减少之外,在赋值时没有任何变化,因为当它们被加载到堆栈时引用计数会增加;从堆栈中弹出以存储到变量将所有权转移到变量,仅此而已。这不是 C++,其中赋值涉及调用构造函数或赋值运算符来执行自定义代码;在一般情况下,临时创建对象和创建对象以长期存储在命名变量中之间存在零实例可观察到的差异。

    我怀疑这里有一个 XY 问题,你真正的解决方案很可能最终会以某种方式使用weakref模块来跟踪哪些对象仍然被引用(自己不持有会阻止对象被清理的引用)。

    2年前 0条评论