当前位置: 首页 > 面试题库 >

如何使自定义对象可迭代?

袁智明
2023-03-14
问题内容

我有一个list自定义类对象(下面是示例)。

使用:list(itertools.chain.from_iterable(myBigList))我想将所有stations子列表“合并”到一个大列表中。因此,我认为我需要使自定义类成为可迭代的。

这是我的自定义类的示例。

class direction(object) :
    def __init__(self, id) :
        self.id = id              
        self.__stations = list()

    def __iter__(self):
        self.__i = 0                #  iterable current item 
        return iter(self.__stations)

    def __next__(self):
        if self.__i<len(self.__stations)-1:
            self.__i += 1         
            return self.__stations[self.__i]
        else:
            raise StopIteration

我实现了__iter____next__但是似乎没有用。他们甚至没有被召集。

知道我做错了什么吗?

注意:使用Python 3.3


问题答案:

__iter__ 当您尝试遍历类实例时调用的是什么:

>>> class Foo(object):
...     def __iter__(self):
...         return (x for x in range(4))
... 
>>> list(Foo())
[0, 1, 2, 3]

__next__是在返回的对象上调用的内容__iter__(在python2.x上next,不是__next__,我一般都对它们都使用别名,以便代码可以与其中任何一个一起使用…):

class Bar(object):
   def __init__(self):
       self.idx = 0
       self.data = range(4)
   def __iter__(self):
       return self
   def __next__(self):
       self.idx += 1
       try:
           return self.data[self.idx-1]
       except IndexError:
           self.idx = 0
           raise StopIteration  # Done iterating.
   next = __next__  # python2.x compatibility.


 类似资料:
  • 问题内容: 我正在尝试使我的对象可包裹。但是,我有自定义对象,这些对象具有ArrayList我制作的其他自定义对象的属性。 最好的方法是什么? 问题答案: 您可以在此处,此处(在此处获取代码)和此处找到一些示例。 您可以为此创建一个POJO类,但是您需要添加一些额外的代码来实现它Parcelable。看一下实现。 创建此类后,您可以Intent像这样轻松地传递此类的对象,并在目标活动中恢复该对象。

  • 我正在使用reverfit2、rxjava2和adapter-rxjava来实现我的http api调用。 如果我有很多api需要实现,并且每个单独的api实现都需要添加这两行: 我不想在每个api实现中添加它们。我想使用MyObservable作为api定义的结果类型。 我的想法如下所示: 我在https://github.com/square/reverfit/blob/master/reve

  • 问题内容: 有像isiterable这样的方法吗?到目前为止我找到的唯一解决办法就是打电话 但是我不确定这有多愚蠢。 问题答案: 检查是否可以处理序列类型,但是对于Python 2中的字符串可能会失败。我也想知道正确的答案,在此之前,这是一种可能性(也适用于字符串): 所述内置的检查的方法或串的情况下的方法。 另一种通用的pythonic方法是假定一个可迭代的对象,如果它不适用于给定的对象,则将优

  • 如果它走路像鸭子,说话像鸭子,样子像鸭子,叫声也像鸭子,那它就是一只鸭子。 对于 Nutz Ioc 来说,它面对的配置文件就是层层嵌套的 "名值对集合",或者说是 Map 集合。 事实上,它是先把整个配置文件解析成 Map 再做判断的。 如果一个 Map 仅包括如下的键,则被认为是一个注入对象: type 对象类型 singleton 是否单例 scope 生命周期范围 events 监听事件 a

  • 通过一个简单的数组,我可以使用标准的循环来实现: 但是如何用实物来做呢?

  • 问题内容: 如果我有一个包含字符串的可迭代对象,是否有一种简单的方法可以将其转换为流?我想做这样的事情: 问题答案: 这是我的流式迭代器,它是urllib3的实验分支,它支持通过可迭代的流式分块请求: 带有上下文的源代码:https : //github.com/shazow/urllib3/blob/filepost- stream/urllib3/filepost.py#L23 相关单元测试: