You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义类实现迭代器报TypeError及返回值格式调整问题

问题修复方案

1. 报错原因及修复

你收到的MyClass不可迭代的报错是两处问题叠加导致:

  • 首先确认你实际运行的代码确实在MyClass内部定义了__iter__方法,你给出的示例代码中该方法是存在的,理论上已经满足类的可迭代要求,若实际运行版本漏写该方法,补全即可消除类不可迭代的报错。
  • 你写的三层嵌套列表推导式存在逻辑错误:迭代MyClass实例时,第一个返回的值是id(整数类型),你后续尝试对整数做for item in subsublist的迭代操作,整数本身不可迭代,这才是报错的根本原因。

2. 格式调整及代码优化

你期望返回[id值, [x坐标, y坐标]]的格式,核心修改两处逻辑即可:

  • 把__init__里生成location的逻辑中size=(1,2)改为size=2,去掉多余的一维嵌套,生成的列表直接是[x,y]格式
  • 简化列表推导式逻辑,不需要三层嵌套,直接将每个MyClass实例转成列表即可

修复后的完整代码

import numpy as np
import itertools

class MyClass():
    id = itertools.count()

    def __init__(self, location = None):
        self.id = next(MyClass.id)
        # 修改size参数,去掉多余的嵌套维度
        self.location = np.random.uniform(0, 1, size=2).tolist()

    def __iter__(self):
        for _ in self.__dict__.values():
            yield _

def create():
    # 简化生成逻辑,直接生成20个实例
    return [MyClass() for _ in range(20)]

objects = create()
# 直接迭代每个实例转列表,不需要复杂嵌套推导
objects = [list(obj) for obj in objects]

运行后每个元素的格式就是你期望的[20, [0.2552026126490259, 0.48489389169530417]]样式。

内容的提问来源于stack exchange,提问作者user1393214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:54:03