collections.Iterable如何与isinstance()一起使用?

时间:2019-02-17 21:37:49

标签: python python-3.x inheritance collections iterable

我想知道为什么isinstance函数与collections.Iterable一起使用,以检查对象是否不是Iterable的子类。

如果我们有两个班级:

class first_class(object):
    pass

class second_class(object):
     def __iter__(self):
         pass

呼叫ininstance(first_class(), Iterable)会返回False

呼叫isinstance(second_class(), Iterable)会返回True

isinstance的文档中说:“返回对象是类的实例还是其子类的实例。”

因为两个类都是object的子类,为什么一个返回它是Iterable的子类,而另一个却不是呢?

我知道这是由于__iter__方法引起的,但是如果两个类的继承相同,我不明白为什么它会影响isinstance的结果。

尝试以下操作时,我会更加困惑:

x = first_class()
x.__iter__ = lambda: None

如果添加__iter__方法使second_class变得可迭代,为什么在上面添加了__iter__方法的代码之后,isinstance(x, Iterable)仍返回False

0 个答案:

没有答案