Get an attribute through a variable
本问题已经有最佳答案,请猛点这里访问。
基本上,我正在尝试使用周期表库编写一个小程序,我尝试创建第一个返回给定元素质量的函数。
1 2 3 | def mass(): Element = input("Element? ") return periodictable.Element.mass |
但这不起作用,因为我试图使用变量而不是属性,所以它说:
1 2 3 4 5 6 | Traceback (most recent call last): File"<string>", line 424, in run_nodebug File"<module1>", line 25, in <module> File"<module1>", line 22, in main File"<module1>", line 15, in mass AttributeError: module 'periodictable' has no attribute 'Element' |
号
在周期表中使用质量函数的正确方法应该是:
1 2 3 | print(periodictable.H.mass) print(periodictable.O.mass) print(periodictable.Na.mass) |
所以我要问的是:我可以给一个带有变量的属性赋值吗?或者你有其他的解决方案让用户选择元素吗?
模块似乎具有以下功能:
1 | periodictable.elements.symbol(Element).mass |
如果还需要按名称等访问元素,则此帮助页可能很有用:
1 | help(periodictable.elements) |
号
这类事情的一般方法是使用getattr:
1 | getattr(periodictable, Element).mass |
但这也会找到"可周期性"的其他属性,比如它定义的函数等等,所以对于这种应用程序,最好避免使用它,因为在这种应用程序中,您正在查找程序用户键入的内容。
您可以使用
1 2 3 4 5 6 | >>> import periodictable >>> periodictable.Na.mass 22.98977 >>> element = 'Na' >>> getattr(periodictable, element).mass 22.98977 |
。