1

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

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

我无法在任何地方找到令人满意的基础机制的完整信息,因此任何关于何时何地发生魔法以及以何种成本发生的指针将不胜感激(导入?实例化?如果实例扩展,则成本翻倍?)

关于用例的一些进一步信息:与以前的用例(对我来说)不同,每个基本对象的实例数量非常有限,并且 abc 测量到没有可感知的开销,这一次它将用于某些东西(节点在一个带有树视图的 DAG),它可以被实例化,然后在适当的位置扩展数百次,并且每个类的虚拟方法的数量可能高达十几个左右。

继承从来不是多重的,而且它通常很浅,最多两三个深,大多数时候只有一个。

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

4

1 回答 1

2

在 Python 2.6 之前,使用 ABC 会带来一些巨大的开销。问题 1762将此报告为一个错误,并且已针对 Python 2.6 进行了修复(通过将一些 ABC 机制移动到 的 C 实现中object)。

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

于 2016-01-18T05:33:25.657 回答