与Python getattr等效,但用于索引或键

2024-04-27 08:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如果复杂容器a包含某些元素xyz,可以通过键或索引(类似于列表或字典)访问这些元素:

xyz = A[somekey]
xyz = A[someindex]

给定一个字符串,如何访问该元素?基本上,我想要相当于:

method_of_a = getattr(A, 'method_of_a') # gets A.method_of_a
prop_of_a   = getattr(A, 'prop_of_a')   # gets A.prop_of_a

但我不知道这样的事情:

element_by_key = getitem(A, 'somekey')# get A['somekey']
element_by_index = getitem(A,'2')# get A[2]

我这样做的原因是,我应该复制一个属性或元素。 问题是,我只能访问基本容器和一个字符串表示的查找位置。一个更现实的例子是:

# copy A.some.weird.path[0].including['Keys']
#   to B.some.weird.path[0].including['Keys']
prop = magic_get_function(A, "some.weird.path[0].including['Keys']")
magic_set_function(B, "some.weird.path[0].including['Keys']", prop)

我不想求助于eval,因为eval是邪恶的(或者更确切地说,它是脆弱的)

如果除了评估没有别的办法,你会怎么做


Tags: ofpath字符串元素getsomekeysmethod