gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:07:53 25 4
gpt4 key购买 nike

所以我正在从头开始用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com