首页 > 解决方案 > 如何从列表中检索对象名称并将其传递给函数以检索该对象属性?“str”对象没有属性

问题描述

python 和 OOP 的新手。希望我使用正确的术语。我正在使用一个列表来保存我的所有对象。我想引用此列表来获取我想为其获取属性值的对象的名称。然后我想将此名称传递给函数以获取一个或多个属性。但是我收到了一个字符串错误(因为列表返回的是对象名称的字符串,而不是实际的对象)。

这是代码:

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 success

animals = [
        ['rat', 'mouse', 'beaver', 'squirrel'],    
        ['chimpanzee','gorilla','orangutan','spider_monkey'],
        ['black_widow','recluse','wolf_spider','daddy_long_leg']
    ]

numberOfLegs = checkLegs(recluse)
print("The Recluse has: ")
print(numberOfLegs)
print(" legs")

这是回应:

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

标签: python-3.x

解决方案


这里有几件事阻止了它的工作。查看您的 checkLegs 函数。它正在返回一个叫做成功的东西......但是,它没有在任何地方使用,并且由于您没有将它包装在 "" 中(我假设您试图返回单词 success 以检查函数是否有效)它正在尝试将其作为变量返回,但当然它是未定义的。您希望该函数返回您使用该函数执行的代码的结果。在这种情况下,您要返回 nbrLegs。您还需要检查构造函数的缩进。您也不需要动物数组,因为您已经在课堂上定义了它们。除此之外,你非常接近。这是您的代码,已实施修复:

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


numberOfLegs = checkLegs(recluse)
print("The Recluse has: " + str(numberOfLegs) + " legs")

推荐阅读