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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:08