You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用input()生成的变量调用Python类实例的属性

问题说明

如何使用从input()生成的变量调用类实例的属性?我编写的代码中,静态写法print(E3.name)可以正常运行,但如果尝试用变量替换'E3'或者'melt'这类属性名时就会运行失败。
原运行代码:

# 用户输入元素编号和需要查询的属性,从Element类返回对应值
class Element():
    def __init__(self, name, atomnum, atomwt, phase, melt, boil, crystal, category, shells, row, period):
        self.name = name
        self.atomnum = atomnum
        self.atomwt = atomwt
        self.phase = phase
        self.melt = melt
        self.boil = boil
        self.crystal = crystal
        self.category = category
        self.shells = shells
        self.row = row
        self.period = period
        

E1 = Element("hydrogen", 1, 1.00794, "gas", -259, -253, "n/a", "non-metal", "1", 1, 1)
E2 = Element("helium", 2, 4.002602, "gas", -272, -269, "n/a", "nobel gas", "2", 1, 18)
E3 = Element("lithium", 3, 6.941, "solid", 181, 1342, "body-centred cubic", "alkali metal", "1,2", 2, 1)
E4 = Element("beryllium", 4, 9.012182, "solid",1287, 2469, "hexagonal", "alkaline earth metal", "2,2", 2, 2)

elnum = input("Element number eg. E3  ")
elattrib = input("Attribute of Element  ")

print(E3.name, " melting point ", E3.melt, "ºC")
# 这行静态代码可以正常输出正确结果,但我想要实现动态输入动态查询
print(elnum.elattrib)
# 这行运行报错:AttibuteError: 'str' Object has no attibute 'elattrib'
解决方案

错误根源

  • input()返回的是字符串类型,你拿到的elnum是类似"E3"的文本值,不是你预先定义的E3实例变量
  • Python的点语法不支持直接跟字符串类型的属性名,elattrib是字符串,不能直接写在.后面作为属性调用

修复方案

  1. 把所有Element实例存入字典,用实例名的字符串作为key,这样可以直接用输入的elnum字符串取到对应实例
  2. 用Python内置函数getattr(实例对象, 属性名字符串)动态获取属性值,同时可以加默认值避免属性不存在时直接崩溃

修改后可运行代码

class Element():
    def __init__(self, name, atomnum, atomwt, phase, melt, boil, crystal, category, shells, row, period):
        self.name = name
        self.atomnum = atomnum
        self.atomwt = atomwt
        self.phase = phase
        self.melt = melt
        self.boil = boil
        self.crystal = crystal
        self.category = category
        self.shells = shells
        self.row = row
        self.period = period

# 用字典存储所有元素实例,方便动态查询
element_map = {
    "E1": Element("hydrogen", 1, 1.00794, "gas", -259, -253, "n/a", "non-metal", "1", 1, 1),
    "E2": Element("helium", 2, 4.002602, "gas", -272, -269, "n/a", "nobel gas", "2", 1, 18),
    "E3": Element("lithium", 3, 6.941, "solid", 181, 1342, "body-centred cubic", "alkali metal", "1,2", 2, 1),
    "E4": Element("beryllium", 4, 9.012182, "solid",1287, 2469, "hexagonal", "alkaline earth metal", "2,2", 2, 2)
}

elnum = input("输入元素编号,例如E3:")
elattrib = input("输入要查询的元素属性:")

# 先从字典取对应实例,再用getattr拿属性
target_element = element_map.get(elnum)
if not target_element:
    print("输入的元素编号不存在")
else:
    attrib_value = getattr(target_element, elattrib, None)
    if attrib_value is None:
        print("输入的属性不存在")
    else:
        print(f"{target_element.name}的{elattrib}属性值为:{attrib_value}")

内容的提问来源于stack exchange,提问作者Srete23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:30:03