gpt4 book ai didi

python - 在 Python 中使用弱引用的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:43 25 4
gpt4 key购买 nike

我有两个类(class) Parent 和 Child。在任何时间点,只有一个 Parent,但可以有多个 Child 对象。 Parent 需要在由 Child 名称索引的字典中保留对 Child 对象的引用。 Child 还需要对 Parent 的引用,因为它可以调用 Parent 的功能之一。

我知道我应该在这里使用 weakref。我有两种方法可以做到这一点:

方法一

class Child():
def __init__( self, parent, name ):
self.parent_ = weakref.proxy( parent )
self.name_ = name

class Parent():
def __init__( self ):
self.children = {}
def createChild( self, name ):
self.children[ name ] = Child( self, name )

方法二

class Child():
def __init__( self, parent, name ):
self.parent_ = parent
self.name_ = name

class Parent():
def __init__( self ):
self.children = {}
def createChild( self, name ):
self.children[ name ] = Child( weakref.proxy( self ), name )
  1. 方法一和方法二黑白有区别吗?
  2. 实现此功能的最佳方式是什么?

编辑:当 Parent 死亡时,Children 也应该死亡。如果父对象不存在,我不希望任何子对象存在。

最佳答案

你真的需要弱引用吗?如果您仅使用方法

self.parent = parent

你会实现你想要做的。如果父对象不再在任何地方被强引用,则对父对象的弱引用将允许销毁父对象,但在这种情况下,子对象将无法调用父对象的函数,因为该对象将不存在。

方法 1 和 2 在我看来是一样的。

R

关于python - 在 Python 中使用弱引用的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38661039/

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