オブジェクトへのすべての参照を一度に削除する方法はありますか?私はそれが非パイソンであることを知っているので、私がやろうとしていることを説明し、おそらく誰かがより良い方法を知っています。
CライブラリのSWIGラッパーの周りにオブジェクト指向ラッパーを書いています。Cオブジェクトの1つのプロキシが削除されると、子オブジェクトも削除されます(Cで直接)。Pythonでプロキシオブジェクトの削除もトリガーしたいと思います。そうしないと、Pythonオブジェクトが無効なポインターを持ち歩き、アクセスされた場合にセグメンテーション違反が発生するという状況に遭遇します。
これは次のようになります。
class Parent(object):
def __init__(self):
self.ptr = swig.createParent()
def __del__(self):
swig.deleteParent(self.ptr) # also deletes children
class Child(object):
def __init__(self, parent):
self.ptr = swig.createChild(parent)
def __del__(self):
swig.deleteChild(self.ptr)
そして、これは私が心配している状況です:
p = Parent()
c = Child(parent)
del p
# accessing c.ptr now would be bad right?