python - 尝试在 Python 中从头开始打印目录系统树(无导入模块)

标签 python directory tree filesystems

所以我正在从头开始用 python 制作一个基本的目录系统。我对编码很陌生,正在将 python 作为 Uni 模块。所以我已经创建了从头开始创建树的功能,但现在我的任务是按原样打印出对象(而不是直观地查看目录树的每个步骤)。 所以这是我目前的代码

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):
        return f"{self.name}, {self.left}, {self.right}"
        

class PlainFile(File):
    def __init__(self, name):
        self.name = name
    
    def __str__(self):
        return self.name

当我尝试打印 root 时,我想从本质上看到整个事情。 但是它在打印类和其他部分的名称时也给了我

最佳答案

如果您使 PlainFile 类实现 __repr__(self) 而不是 __str__(self),它应该可以工作。参见 What is the difference between __str__ and __repr__?更多细节。 Directory 类的 __repr__ 的好处是它已经递归了,因为它会调用内部 File' s __repr__ 在评估 f 字符串时起作用。

编辑:添加完整的解决方案以匹配预期的输出。

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):
        arg_str = ", ".join(
            str(arg)
            for arg in (self.name, self.left, self.right)
            if arg is not None
        )
        return f"Directory({arg_str})"


class PlainFile(File):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"PlainFile({self.name})"

我在 Directory 实现中使用了 str(),因为它不会向 self.name 添加引号,因为它是一个字符串。默认情况下,__str__ 实现为 __repr__,因此它也适用于 left 中的 File 对象code>right,并且在列表上调用 str() 将使其在其项目上调用 repr()

关于python - 尝试在 Python 中从头开始打印目录系统树(无导入模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70149234/

相关文章:

linux - 在 Linux 中删除选定的 60 天旧文件的脚本

java - 使用 Swing 组件显示目录和 FTP 服务器中的文件的最佳方式

c# - 目录树的倒数第二层

javascript数组树搜索保留节点和父节点

python - 从 Pandas /字典创建交互式层次结构图

python - 原始套接字 python 数据包嗅探器

python - Scrapy 的 XPath 中的 OR 条件

python - 查找列表中最不常见的元素

security - 用于安全创建临时目录的 POSIX 函数是什么?

python - 从重复数组中绘制 python 绘图