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

Python OOP问题:如何从列表获取对象并调用其属性?

解决Python中字符串对象无法访问类属性的问题

嘿,刚接触Python和面向对象编程(OOP)的话,遇到这个问题太正常了,我来帮你一步步理清~

问题根源

你现在的核心问题是:列表animals里存储的是对象名称的字符串(比如'recluse'),而不是你实际创建的creature类实例(也就是recluse这个变量对应的对象)。

当你把字符串传给checkLegs函数时,函数尝试访问这个字符串的legs属性,但字符串本身根本没有这个属性,所以就触发了AttributeError: 'str' object has no attribute 'legs'这个错误。

修正方案

这里给你两种常用的解决思路:

方案1:直接在列表中存储对象实例

这是最直观的方法,把列表里的字符串替换成你已经创建好的creature对象:

class creature():
    def __init__(self, name, legs):
        self.name = name
        self.legs = legs

rat = creature("rat",4)
mouse = creature("mouse",4)
beaver = creature("beaver",4)
squirrel = creature("squirrel",4)
chimpanzee = creature("chimpanzee",2)
gorilla = creature("gorilla",2)
orangutan = creature("orangutan",2)
spider_monkey = creature("spider_monkey",2)
black_widow = creature("black_widow",8)
recluse = creature("recluse",8)
wolf_spider = creature("wolf_spider",8)
daddy_long_leg = creature("daddy_long_leg",8)

def checkLegs(critter):
    nbrLegs = critter.legs
    return nbrLegs  # 这里要返回nbrLegs,你原来的success未定义

# 替换成存储对象实例的列表
animals = [
    [rat, mouse, beaver, squirrel],
    [chimpanzee, gorilla, orangutan, spider_monkey],
    [black_widow, recluse, wolf_spider, daddy_long_leg]
]

# 测试:从列表中取对象传入函数
numberOfLegs = checkLegs(animals[2][1])  # 取recluse对象
print("The Recluse has: ")
print(numberOfLegs)
print(" legs")

方案2:用字典映射字符串到对象

如果你需要保留对象名称的字符串(比如要显示名称),可以创建一个字典,把字符串和对应的对象关联起来:

# 先创建对象映射字典
animal_dict = {
    'rat': rat,
    'mouse': mouse,
    'beaver': beaver,
    'squirrel': squirrel,
    'chimpanzee': chimpanzee,
    'gorilla': gorilla,
    'orangutan': orangutan,
    'spider_monkey': spider_monkey,
    'black_widow': black_widow,
    'recluse': recluse,
    'wolf_spider': wolf_spider,
    'daddy_long_leg': daddy_long_leg
}

# 通过字符串获取对象,再传入函数
test_animal_name = 'recluse'
numberOfLegs = checkLegs(animal_dict[test_animal_name])
print(f"The {test_animal_name.title()} has: {numberOfLegs} legs")

额外小修正

你的checkLegs函数里原来的return success是错误的,因为success这个变量根本没定义,应该改成返回nbrLegs,这样函数才能返回正确的腿数。

你遇到的错误信息

The test animal is: orangutan
Traceback (most recent call last):
File "/Python37/help.py", line 32, in
numberOfLegs = checkLegs(testAnimal)
File "Python37/help.py", line 20, in checkLegs
nbrLegs = critter.legs
AttributeError: 'str' object has no attribute 'legs'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:55:40