【发布时间】:2018-01-23 17:47:45
【问题描述】:
首先我应该说这可能不是最好的做法,所以我愿意接受建议。
我正在转发对象的__subclasses__ 列表以运行多个操作。问题是我希望动态添加和删除对象,我希望__subclasses__ 列表能够反映这些更改。但是我没有成功更新它。
这是一个例子:
>>> class a(object):
>>> pass
>>> class b(a):
>>> pass
>>> del b
>>> a.__subclasses__()
[<class 'b'>]
我期待得到一个空列表。
现在因为我在我的代码中使用了 a.__subclasses__(),所以我希望在删除对象时更新它。
我尝试使用垃圾收集器并在删除对象后立即调用collect(),就像建议的here 一样,但这也没有帮助。
如果您认为这不是最佳做法并且有更好的方法去做,我会很高兴听到 :)
【问题讨论】:
-
您愿意接受建议,您能否提供一些您想要实现的目标的背景信息?
-
运行
gc.collect()确实为我删除了子类,只要从_无法访问子类。 -
@GerardvanHelden 我有一个服务器 api,它使客户端能够在 mongo 中定义一个集合,而不是为其生成 CRUD。现在客户端完成后,它可以请求处理该集合。我正在创建这个集合,继承一个预定义的对象以获得特定的行为。现在我为我的对象的所有子类启用了不同的功能。我在我的实现中转发了子类列表。现在上下文更清楚了吗?
-
@user2357112 我正在使用 python 2.7.10
-
这绝对是重复的。我可以在 2.7.10 下重现您的问题,因为
_引用了a.__subclasses__()返回的列表。正如我在回答中显示的那样,清除_会清除对子类的引用,gc.collect()可以获取它,此时a.__subclasses__()返回一个空列表。如果您仍然看到列出的b,那么您在某处有更多引用,它们仍然保持活跃。
标签: python inheritance subclass