gpt4 book ai didi

带有字符串的Python多级getattr

转载 作者:行者123 更新时间:2023-12-01 23:07:02 24 4
gpt4 key购买 nike

我有一个函数(此处称为 analyze_data),它接受一个对象和一个字符串作为输入,并使用该字符串通过 getattr“提取”数据。当数据处于属性的“第一”级别 (data1) 时,此方法工作正常。但是,当数据处于较低级别 (data2) 时,我不知道我可以将什么传递给函数来访问数据。传递点分字符串(如下所示)不起作用。

class a:
pass

instance1 = a()

# Create 1st data set
instance1.data1 = [1,2,3]

# Create 2nd data set
instance1.subdata = a()
instance1.subdata.data2 = [4,5,6]


def analyze_data(myvar, dataname):
data = getattr(myvar, dataname)
# Do something with data, e.g.:
print(str(data[0]))

analyze_data(instance1, 'data1')
analyze_data(instance1, 'subdata.data2')

访问 data2 而又不过多更改现有函数 analyze_data 的最佳方法是什么?

最佳答案

你应该使用 attrgetter 而不是 getattr这允许您使用点符号指定。这确实需要对您的函数进行微小的更改,如下所示。

from operator import attrgetter

def analyze_data(myvar, dataname):
fn = attrgetter(dataname)
data = fn(myvar)
# Do something with data, e.g.:
print(str(data[0]))

analyze_data(instance1, 'data1')
1

analyze_data(instance1, 'subdata.data2')
4

关于带有字符串的Python多级getattr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70681561/

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