__getitem__与可迭代类型

来源:4-1 鸭子类型和多态

Pythonist

2019-01-10

from collections import Iterable


class Company(object):

    def __init__(self, employee_list):
        self.employee = employee_list

    def __getitem__(self, item):
        return self.employee[item]


company = Company(['tom', 'bob', 'jane'])
print(isinstance(company, Iterable))
for item in company:
    print(item)

老师,课程中说company实现了__getitem__魔法方法,是可迭代类型,也可用于for循环,但为什么使用isinstance(company,Iterable)结果是False呢?

写回答

1回答

bobby

2019-01-12

课程中其实提到过,实现__getitem__能进行for循环是因为for循环最开始会调用__iter__方法找不到的话会去退一步调用__getitem__方法,所以严格的说可以进行循环是因为for循环的语法做了优化,但是并不代表就是Iterable类型,你可以看看Iterable类型的源码,里面要求实现了__iter__方法才是可迭代对象

0
2
bobby
回复
Pythonist
好的,
2019-01-20
共2条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程