我的设计如下:
__main__
参考a
a
参考b
b
参考a
a
被创建然后从__main__
因此a
并b
具有循环引用。但是,del a
我宁愿两者兼而有之a
,然后将其b
处理掉。
我在很多地方看到使用上下文管理器的建议,特别是with
语句而不是__del__()
. 但是,我在本地范围内看到的所有with
开始和结束示例(例如,某种方法)
这可以优雅地执行with
吗?
什么是替代方案?
我的设计如下:
__main__
参考a
a
参考b
b
参考a
a
被创建然后从__main__
因此a
并b
具有循环引用。但是,del a
我宁愿两者兼而有之a
,然后将其b
处理掉。
我在很多地方看到使用上下文管理器的建议,特别是with
语句而不是__del__()
. 但是,我在本地范围内看到的所有with
开始和结束示例(例如,某种方法)
这可以优雅地执行with
吗?
什么是替代方案?
我建议:
__del__
的显式dispose
方法中一般来说,当你知道你有循环引用时,依赖自动__del__
处理并不是一个好主意。它很脆弱——即使你设法让它在某些情况下工作,依赖项的微小变化也可能再次破坏它。
什么是替代方案?
没做什么。直到你创建了数百万个这样的循环引用——并且可以证明这个(而且只有这个)正在破坏你的程序——这实际上并不重要。
垃圾收集器应该处理这个问题。