Kuz*_*nbo 6 python collections inheritance iterable python-3.x
我想知道为什么该isinstance
函数collections.Iterable
用于检查对象是否可迭代,如果它不是Iterable
.
如果我们有两个类:
class first_class(object):
pass
class second_class(object):
def __iter__(self):
pass
Run Code Online (Sandbox Code Playgroud)
调用ininstance(first_class(), Iterable)
返回False
。
调用isinstance(second_class(), Iterable)
返回True
。
的文档isinstance
说:“返回对象是类的实例还是其子类的实例”。
因为两个类都是 的子类object
,为什么一个会返回它是 的子类Iterable
而另一个不是?
我知道这是因为__iter__
方法,但我不明白为什么它会影响isinstance
的结果,如果两个类中的继承相同。
当我尝试以下操作时,我变得更加困惑:
x = first_class()
x.__iter__ = lambda: None
Run Code Online (Sandbox Code Playgroud)
如果添加__iter__
方法使 second_class 可迭代,为什么在上面添加__iter__
方法的代码之后,isinstance(x, Iterable)
仍然返回False
?
归档时间: |
|
查看次数: |
283 次 |
最近记录: |