我可以在每次继承抽象类时运行代码吗?

tim*_*ion 2 python django

我需要为从抽象类继承的所有类连接django 信号。是否有一个神奇的Python方法__on_inherit__可以让我在每次继承抽象类时运行信号连接代码?

更新:只是为了澄清,我需要在每个类上运行一次类评估代码,而不是每个实例/对象运行一次。

Ter*_*eus 5

是的,确实有 [ __init_subclass__][1] 钩子,每次类被子类化时都会触发它。

它将使用第一个参数cls作为子类(而不是原始父类)进行调用。正如文档中所述,您甚至可以将任意参数从子类传递给挂钩。

希望这对您有帮助。

编辑:这是通过 Python 版本 3.6 中的 PEP 487 [2] 添加的。在早期的 python 版本中,不会调用此方法。

[1] https://docs.python.org/3/reference/datamodel.html#object。初始化子类

[2] https://www.python.org/dev/peps/pep-0487/