gpt4 book ai didi

python - 寻求目录树数据表示的优雅设计

转载 作者:行者123 更新时间:2023-11-28 17:51:08 25 4
gpt4 key购买 nike

我正在寻求有关在 Python 中优雅设计来表示没有符号链接(symbolic link)的文件目录的建议,我可以在其中查询“属于”方面的关系(例如 G 是/A/的子目录)公元前)。我目前的想法是朝这个方向发展的:

给定一个根路径,我os.path.walk() 它自上而下。两个类代表我感兴趣的节点类型,我会跟踪父子关系。

class ADir(object):
def __init_(self, name, parent=None):
self.name = name
self.parent = parent
self.children = []
def add_child(self, id):
self.children.append(id)

class AFile(object):
def __init_(self, name, parent=None):
self.name = name
self.parent = parent

我将不得不重新实现对现有目录的检查、为我提供目录/文件位置的函数等。这一切开始感觉非常像重新实现现有的通用树算法。

通过 StackExchange、Google 等搜索大量不同的方法。我发现没有一个似乎利用了给定目录结构的自然边界。

对讨论、博客条目和代码的任何想法和指示表示赞赏。

最佳答案

当今语言中树结构的问题是很难创建一种结构来适应它们。有很多方法可以构建三元组(有或没有父指针,子节点可以是对(二叉树或红黑树)或列表(有或没有查找键的索引)。

虽然可以为所有算法定义遍历算法,但每个算法都需要不同的实现。

然后我们就有了在树中查找元素的问题。我们按索引工作吗(在二叉树中非常无用)?一些标识符?标识符应该是什么类型?我们如何从这些标识符构建路径?我们如何表示相对路径?

这就是为什么我们有许多现代语言内置的 map 和列表,但没有树。据我所知,Scala 是为数不多的支持通用树类型概念的 OO 语言之一,但仅支持二叉树,即使是二叉树也有些奇怪。

最重要的是,大多数 OO 语言不支持从现有类的片段构建类的足够方法。你可以继承(但你得到了一切),多重继承(甚至更多的问题),mix in (多重继承的一些特性没有一些缺点)。但我真的缺少一个功能,它说:从 Foo 类型中获取方法 x() 和从 Bar 中获取方法 y() 构建 Baz

否则,基于 OO 的树基类将需要针对您的特定用例进行大量调整,而直接实现相同的功能将需要相同数量(甚至更少)的代码行。

关于python - 寻求目录树数据表示的优雅设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9597032/

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