ABC的计算成本

computational cost of ABC

我过去使用过 abc,我想再次使用它们,以使用 @abstractmethod 强制执行类似纯虚拟的方法。这是在用户将经常扩展的 Python 前端到 API 的上下文中。

开发一个可靠的规模综合测试对我来说有点太复杂了,我一直用abc作为一个黑魔法封闭的盒子,所以我不知道抽象和检查的成本在哪里abstracts 是什么,什么时候可能发生,或者实际成本是多少,或者它的规模是多少。

我无法在任何地方找到关于底层机制的令人满意的完整信息,因此任何指向魔法发生的时间和地点以及代价是什么的指针将不胜感激(导入?实例化?如果扩展实例,则双倍成本?)

关于用例的一些进一步信息: 与以前的用例(对我而言)不同,每个基础对象和 abc 的实例数量非常有限,测量到没有可察觉的开销,这一次它将用于某些东西(具有树视图的 DAG 中的节点)可以被实例化,然后就地扩展数百次,虚方法的数量可能会增加到每 class.

十几个左右

继承永远不会是多重的,而且通常很浅,最多两到三个深度,大多数时候只有一个。

Python 2.7 由于第 3 方平台限制。

在 Python 2.6 之前,使用 ABC 会带来一些显着的开销。 Issue 1762 将此报告为错误,并已在 Python 2.6 中修复(通过将一些 ABC 机制移动到 object 的 C 实现中)。

在 Python 的较新版本中,ABC-using 和使用 类 的 non-ABC 之间的性能差异应该很小(该错误提到了非常小的剩余差异isinstance 检查的速度,但其他操作的性能差异基本上为零)。