Python无导入模块从零实现目录系统树 修复__repr__递归打印问题
问题根因
PlainFile类仅实现了__str__方法,当该类实例作为其他对象的属性被打印时,Python会默认调用__repr__方法,未自定义的情况下就会输出<模块名.类名 object at 内存地址>这类默认内容Directory类的__repr__没有做递归适配,直接拼接子节点属性无法输出结构化的嵌套内容
代码修改
class File: pass class Directory(File): def __init__(self, name, left=None, right=None): self.name = name self.left = left self.right = right def __repr__(self): # 递归处理左右子节点,None的情况输出空占位 left_repr = repr(self.left) if self.left is not None else "None" right_repr = repr(self.right) if self.right is not None else "None" return f"Directory({self.name}, [{left_repr}, {right_repr}])" class PlainFile(File): def __init__(self, name): self.name = name def __str__(self): return self.name # 新增__repr__方法,保证嵌套打印时也能输出正常内容 def __repr__(self): return f"PlainFile({self.name})"
测试效果
构造测试用例验证:
# 构造测试目录结构 # 根目录下有子目录doc,和普通文件readme.txt # doc目录下有普通文件note.md root = Directory( "root", left=Directory( "doc", left=PlainFile("note.md") ), right=PlainFile("readme.txt") ) print(root)
输出结果:Directory(root, [Directory(doc, [PlainFile(note.md), None]), PlainFile(readme.txt)])
如果不需要输出类名,只想输出名称和结构,修改对应__repr__的返回格式即可。
内容的提问来源于stack exchange,提问作者BanAckerman
相关产品推荐
相关产品推荐

