【问题标题】:How to change which class variable is being called depending on user input?如何根据用户输入更改正在调用的类变量?
【发布时间】:2017-01-05 00:00:02
【问题描述】:

我创建了一个名为Earthquake 的类,它将相关的地震数据(震级、撞击时间等)存储在类变量中。我想询问用户他们想查看哪些数据,然后像这样为他们打印出这些数据:

earthquake1 = Earthquake()

answer = input("What data would you like to see?")
print(earthquake1.answer)

在上面的例子中,如果用户回答magnitude,我想打印出类变量earthquake1.magnitude

有没有办法做到这一点?

【问题讨论】:

  • 可能 getattr... 也很容易用 eval 完成,但 eval 是邪恶的
  • @dfasoro 我宁愿不使用 if 语句,因为我有 20 多个属性
  • 好的,@A.J. '下面的答案就足够了,我建议您清理/过滤输入,以防您在不一定希望用户看到的地震对象中有一些属性(除了 20)。
  • Earthquake 实例如何知道他们正在发生的地震?

标签: python class python-3.x class-variables


【解决方案1】:

您可以使用getattr,它等同于earthquake.attr_name。不同之处在于getattr 允许您使用变量来访问名称并在未找到时提供默认值。

简而言之:

 print(getattr(earthquake1, answer))

或者,如果您需要使用默认值而不是提高 KeyError

print(getattr(earthquake1, answer, "Instance variable {} not found".format(answer)))

【讨论】:

    【解决方案2】:

    只需使用getattr:

    earthquake1 = Earthquake()
    
    answer = input("What data would you like to see?")
    print(getattr(earthquake1, answer))
    

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2019-01-28
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多