通过用户输入访问类属性?

时间:2019-02-28 15:38:55

标签: python python-3.x

我对Python相当陌生,我刚刚开始使用类。我想做一个化学计算器(计算摩尔质量,浓度等)。我希望到目前为止一切都正确。我的问题是:(希望我能正确表达自己的意思)如何通过用户输入调用类实例化?

我有以下课程:

class Elements:
def __init__(self, name='',atomic_mass=0.0):
    self.name = name
    self.atomic_mass = atomic_mass

然后,我(希望我正确放置了它)实例化为这样:

nitrogen = N = Elements('Nitrogen', 14.01)

我写了nitrogenN是因为我想知道用户输入是想用nitrogen还是N来显示相同​​的内容。另外,这是最好的方法吗?我对所有元素及其几乎所有属性都已经完成了一半。

现在,我自己可以做:print(N.atomic_mass),我会得到14.01 关于我的问题,我将如何实现这样的目标:

element_name = input('Insert element name: ')
print(element_name.atomic_mass)

,然后获取所需的值。之所以需要这样做,是因为如果我想通过用户输入来计算分子的质量,则有必要拆分字符串,找到元素并将其链接到属性。

我尝试了this,但没有成功。 我知道我可以做到:

if element_name == 'N':
print(N.atomic_mass)

但是对于元素周期表中的118个元素必须执行此操作似乎很多。好吧,我可以做到,但我相信是一种更好,更简单的方法。

是否有可能做到我所要求的?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用dict代替每个元素的类实例。 (顺序并不重要,因为“ dict”不保留顺序) 该字典可以直接保存值,也可以保存Element实例

elements = {
    'Nitrogen': 14.01,
    'Carbon': 12.0,
    ...
}

elements = {
    'Nitrogen': Element('Nitrogen', 14.01),
    ...
}

然后您可以通过以下方式使用它:

element_name = input('Insert element name: ')
print('atomic mass:', elements[element_name])

注意:如果用户输入的元素无效,这可能会引发KeyError,因此您可以添加错误检查

element_name = input('Insert element name: ')
try:
    print('atomic mass:', elements[element_name])
except KeyError:
    print('the element does not exist')