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

Python中如何实现自定义类实例的可迭代遍历

实现方法

要让自定义类实例支持直接被for循环遍历,只需要在类中实现__iter__特殊方法,在方法中按需要的顺序返回要遍历的属性即可。

针对你批量创建目录的需求,改造后的可运行代码如下:

import os

class foo:
    def __init__(self):
        self.a = 'path1'
        # 原写法路径拼接漏了分隔符,会生成path1path2而非path1下的子目录,这里用os.path.join做跨平台兼容拼接
        self.b = os.path.join(self.a, 'path2')

    def __iter__(self):
        # 按创建顺序返回路径:先返回父目录,再返回子目录,避免创建子目录时父目录不存在报错
        yield self.a
        yield self.b

bar = foo()

for path in bar:
    if not os.path.isdir(path):
        os.mkdir(path)

补充说明

  • __iter__是Python迭代协议的要求,只要类定义了这个方法并返回迭代器,实例就可以直接被for循环遍历,用yield返回值是最简便的写法
  • 如果你确实需要遍历类实例的全部属性,也可以在__iter__中通过self.__dict__取属性值,但这种方式无法保证遍历顺序,也会暴露所有实例属性,不适合当前的目录创建场景,写法参考:
def __iter__(self):
    # 非必要不使用:遍历所有实例属性,遍历顺序不可控
    yield from self.__dict__.values()
  • 如果目录层级更深,建议按从父到子的顺序在__iter__中排列路径,或者在创建目录时改用os.makedirs(path, exist_ok=True),自动递归创建不存在的父目录,减少顺序依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23