【问题标题】:Printing attributes outside of a class getattr Python在类 getattr Python 之外打印属性
【发布时间】:2021-06-22 05:01:22
【问题描述】:

我正在尝试使用getattr 打印出result1.keyresult2.key。但是我无法让最后一个打印功能起作用。我收到错误:NameError: name 'key' is not defined。我怎样才能使打印功能print(getattr(result1, key)) print(getattr(result2, key)) 工作以获得预期输出?

results = ["result1", "result2"]
valuelist1 = [3, 5]
valuelist2 = [10, 6]

def func(val, val2):
    return val* val2 + val2/2

class Dummy:
    def __init__(self, val, val2):
        self.key = func(val, val2)

for counter, runs in enumerate(results):
    dummy = Dummy(valuelist1[counter], valuelist2[counter])
    globals()[runs] = dummy


print(result1.key)
print(result2.key)
for name in results:
    print(getattr(name, "key")) 

预期输出:

35.0
33.0
35.0
33.0

【问题讨论】:

标签: python-3.x function class for-loop global


【解决方案1】:

您将 Dummy 实例分配给 globals()。所以你需要以同样的方式访问它们,因为name 只是你的变量的字符串/名称(在全局范围内)。

for name in results:
    print(globals()[name].key)

for name in results:
    print(getattr(globals()[name], "key"))

或(但一般我不建议使用eval(),为了完整起见仅作为另一种可能的方式提及)

for name in results:
    print(eval(name).key)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2020-11-11
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2016-03-21
    相关资源
    最近更新 更多