关于python:通过变量获取属性

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

但这也会找到"可周期性"的其他属性,比如它定义的函数等等,所以对于这种应用程序,最好避免使用它,因为在这种应用程序中,您正在查找程序用户键入的内容。


您可以使用getattr

1
2
3
4
5
6
>>> import periodictable
>>> periodictable.Na.mass
22.98977
>>> element = 'Na'
>>> getattr(periodictable, element).mass
22.98977