为什么要遍历__mro__并检查__subclasshook__中的__dict__?

时间:2016-12-15 20:24:14

标签: python

以下是如何使用Python docs中的__subclasshook__

的示例
@classmethod
def __subclasshook__(cls, C):
    if cls is MyIterable:
        if any("__iter__" in B.__dict__ for B in C.__mro__):
            return True
    return NotImplemented

有人已经问why the "if cls" check is necessary,但还有一件事我不明白。为什么要明确查看__dict__中的每个__mro__?不能说if hasattr(C, '__iter__')吗?我用一个玩具示例尝试了后者,它按照我的预期工作,但我想知道是否存在一些细微差别,或者文档中的样式是否因为“历史原因”而存在。

0 个答案:

没有答案