在Python中执行类(元类实例)销毁代码

问题描述 投票:0回答:1

我们有一些 API 应该在每个 python 进程中关闭一次(例如

api.shutdown()
),并且仅特定于控制器层次结构中的特定类(例如
ControllerA
)(例如由
Controller
继承的
ControllerA
, ...,
ControllerZ
)。当销毁类本身而不仅仅是它的任何实例时,我可以以某种合理的方式在 python 中添加“析构函数逻辑”吗?据我所知,在Python中,类不会像对象那样显式销毁,而是在不存在对它们的引用时收集垃圾,但也许有某种方法可以实现上述效果?我想要的是对所有实例执行一次
api.shutdown()
调用,但不是明确的,因为不应该对
ControllerB
...,
ControllerZ
的实例执行此操作。使用元类或元类析构函数之类的东西可以实现类似的效果吗?

python garbage-collection metaclass
1个回答
0
投票

你不需要元类 - 只需一个类方法。

元类实际上甚至没有帮助 - 因为它们的

__del__
方法永远不会被调用。

只需有一个类级别注册表 - 作为类属性的列表 - 并将所有打包的实例附加到那里。这个线圈 eb 在

__init__
中完成,但也在元类
__call__
方法中完成。

现在任何代码都可以通过此注册表并关闭所有实例中所需的任何内容。可能有一个类方法可以做到这一点,由 valled 来实现。你的

shutdown
本身。

© www.soinside.com 2019 - 2024. All rights reserved.