Python:有没有办法知道 class 的实例是否已分配给变量?
Python: Is there a way of knowing whether an instance of a class has been assigned to a variable?
我正在写一个 Body2D class,在 __add__()
魔术方法下,我想知道 class 的一个实例是否实际分配给了一个变量,或者它是否只是为了添加而创建的。
例如,我如何区分这两者:
earth = Body2D()
venus = Body2D()
mars = earth + venus
...其中两个第一个实例都绑定到一个变量,并且:
mars = Body2D() + Body2D()
?
我问的原因是因为我已经创建了一个 class 变量(列表),其中包含到目前为止创建的所有对象的 ID,我不想存储尚未创建的对象的 ID已分配给变量。
如有任何帮助,我们将不胜感激!谢谢!
这是不可能的。从您的 class 实例的角度来看, nothing 在分配时发生变化,除了它们的引用计数 failing 被减少,因为当它们被加载到堆栈时,引用计数会增加;从堆栈弹出以存储到变量将所有权转移到变量,仅此而已。这不是 C++,其中赋值涉及调用构造函数或赋值运算符来执行自定义代码;在一般情况下,临时创建对象和创建对象以在命名变量中长期存储之间存在 零 实例可观察差异。
我怀疑 an XY problem here, and in all likelihood your true solution will end up using the weakref
module 以某种方式跟踪哪些对象仍然被引用(没有自己持有会阻止对象被清理的引用)。
我正在写一个 Body2D class,在 __add__()
魔术方法下,我想知道 class 的一个实例是否实际分配给了一个变量,或者它是否只是为了添加而创建的。
例如,我如何区分这两者:
earth = Body2D()
venus = Body2D()
mars = earth + venus
...其中两个第一个实例都绑定到一个变量,并且:
mars = Body2D() + Body2D()
?
我问的原因是因为我已经创建了一个 class 变量(列表),其中包含到目前为止创建的所有对象的 ID,我不想存储尚未创建的对象的 ID已分配给变量。
如有任何帮助,我们将不胜感激!谢谢!
这是不可能的。从您的 class 实例的角度来看, nothing 在分配时发生变化,除了它们的引用计数 failing 被减少,因为当它们被加载到堆栈时,引用计数会增加;从堆栈弹出以存储到变量将所有权转移到变量,仅此而已。这不是 C++,其中赋值涉及调用构造函数或赋值运算符来执行自定义代码;在一般情况下,临时创建对象和创建对象以在命名变量中长期存储之间存在 零 实例可观察差异。
我怀疑 an XY problem here, and in all likelihood your true solution will end up using the weakref
module 以某种方式跟踪哪些对象仍然被引用(没有自己持有会阻止对象被清理的引用)。