gpt4 book ai didi

python - 如何访问(和修改)python 类层次结构中的任意项

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:01 26 4
gpt4 key购买 nike

我有一个以如下方式构建的类,用于构建树结构。

class Node(object):
def __init__(self, data):
self.data = data
self.children = []

def add_child(self, obj):
self.children.append(obj)


n00 = Node('n00')
n00.add_child(Node('n000'))
n00.add_child(Node('n001'))

n0 = Node('n0')
n0.add_child(n00)
n0.add_child(Node('n01'))
n0.add_child(Node('n02'))

n1 = Node('n1')
n1.add_child(Node('n10'))
n1.add_child(Node('n11'))

n20 = Node('n20')
n20.add_child(Node('n200'))
n20.add_child(Node('n201'))

n2 = Node('n2')
n2.add_child(n20)
n2.add_child(Node('n21'))

h = Node('head')
h.add_child(n00)
h.add_child(n01)
h.add_child(n02)

现在当我只想访问一个项目时,可以通过一个简单的函数来完成,例如:

def access(tree, *id):
item = tree
for i in id:
item = item.children[i]

return item.data

print(access(h,0,1))

问题是当我想对任何节点进行更改时,我无法使用此方法并且总是需要手动输入冗长的成员,例如:

h.children[1].children[0].data = 'new value'

h.children[0].children[0].children[1].add_child(Node('n0010'))

现在,每当树的深度变深时,重复输入所有这些内容就会变得非常痛苦。是否有类似于访问方法的“Python”方法来更改树中的项目?

最佳答案

继续修改节点:使用与 access 方法中相同的“行走”技术,然后不返回 item.data 而是分配一个它的新值(value):

def modify(new_data, tree, *id):
item = tree
for i in id:
item = item.children[i]

item.data = new_data

例子:

print(access(h, 0, 1))
modify("n001new", h, 0, 1)
print(access(h, 0, 1))

打印:

n001
n001new

添加 child 也是一样:

def insert_child(new_child, tree, *id):
item = tree
for i in id:
item = item.children[i]

item.add_child(new_child)

这样调用它:

insert_child(Node('n0010'), h, 0, 1)

关于python - 如何访问(和修改)python 类层次结构中的任意项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861328/

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