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
相关产品推荐
相关产品推荐

