python-3.x - 如何从列表中检索对象名称并将其传递给函数以检索该对象属性?“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'
解决方案
这里有几件事阻止了它的工作。查看您的 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")
推荐阅读
- javascript - 使用 momentjs 在 DST 期间获取时区缩写
- break - 如何在 InDesign 脚本中打断一行文本?
- pandas - 如何将 GROUPBY 的结果与 pandas 中的原始数据框连接起来?
- python - 在管理面板和站点(Django)中同时授权管理员
- filter - SPARQL - 过滤评论。标签和摘要到英文并保留整数和 uri 值
- excel - VBA搜索边界单元格并提取
- javascript - 将更新的元素从 JS 线程传递到 Shadow Thread
- c++ - 结构**我错过了什么?
- flask - Flask 在主模块外设置 @app 装饰器
- jena - tdb2.tdbcompact 命令行工具返回 Failed to get a lock: file