是否有令人信服的理由来调用type.mro()
而不是直接迭代type.__mro__
?访问速度实际上快了约 13 倍(36ns vs 488ns)
我在寻找缓存时偶然发现了它type.mro()
。这似乎是合法的,但它让我想知道:我可以依靠type.__mro__
,还是必须打电话type.mro()
?在什么情况下我可以摆脱前者?
更重要的是,必须发生哪些条件type.__mro__
才能无效?
例如,当定义/创建一个改变现有类的 mro 的新子类时,现有类是否会.__mro__
立即更新?每次创建新班级时都会发生这种情况吗?这使它成为类类型的一部分?哪一部分?..或者这type.mro()
是关于什么的?
当然,所有这些假设type.__mro__
实际上是一个缓存名称的元组,它们指向给定类型的 mro 中的对象。如果该假设不正确;那这是什么?(可能是描述符或其他东西..)为什么我可以/不能使用它?
编辑:如果它是一个描述符,那么我很想学习它的魔力,因为两者都是:type(type.__mro__) is tuple
和type(type(type).__mro__) is tuple
(即:可能不是描述符)
编辑:不确定这有多相关,但type('whatever').mro()
返回一个列表,而type('whatever').__mro__
返回一个元组。(不?)幸运的是,附加到该列表不会更改对相关类型(在本例中为 str)的__mro__
或后续调用。.mro()
谢谢您的帮助!