Python 如何使用变量作为对象名从对象获取属性

Python 如何使用变量作为对象名从对象获取属性,python,python-3.x,Python,Python 3.x,我想做的是在列表中随机选择一个项目,然后使用它来遍历该对象的属性。很明显,我可以硬编码当前的目标变量(bioter.Dog.attr1),但我希望能生成这个变量 我的代码是这样的: class Creature(object): def __init__(self, name, attr1, attr2): self.name = name self.attr1 = attr1 self.attr2 = attr2 Squirrel

我想做的是在列表中随机选择一个项目,然后使用它来遍历该对象的属性。很明显,我可以硬编码当前的目标变量(
bioter.Dog.attr1
),但我希望能生成这个变量

我的代码是这样的:

class Creature(object):

    def __init__(self, name, attr1, attr2):
        self.name = name
        self.attr1 = attr1
        self.attr2 = attr2


Squirrel = Creature("Squirrel", 20, 1)
Dog = Creature("Dog", 50, 10)
Goblin = Creature("Goblin", 100, 100)

creature_list = ['Squirrel', 'Dog', 'Goblin']

def get_creature():
    return random.choice(creature_list)
这些是从我的主课中调用的:

current_target = Creature.get_creature()
print("The current target is %s, and has %s, and %s"  
     % (current_target, Creature.current_target.attr1, Creature.current_target.attr2))
使用实例而不是字符串 一个简单的改变是将你的
生物
实例放在列表中并从中选择

import random

class Creature(object):

    def __init__(self, name, attr1, attr2):
        self.name = name
        self.attr1 = attr1
        self.attr2 = attr2


Squirrel = Creature("Squirrel", 20, 1)
Dog = Creature("Dog", 50, 10)
Goblin = Creature("Goblin", 100, 100)

creature_list = [Squirrel, Dog, Goblin]

def get_creature():
    return random.choice(creature_list)

current_target = get_creature()
print("The current target is %s, and has %s, and %s"
     % (current_target.name, current_target.attr1, current_target.attr2))

谢谢你,格雷姆。我之前在列表中有
生物
,但仍然试图从类调用,而不是直接从变量调用。那句解释变化的话对我真的很有帮助。
class Creature(object):

    def __init__(self, name, attr1, attr2):
        self.name = name
        self.attr1 = attr1
        self.attr2 = attr2

Squirrel = Creature("Squirrel", 20, 1)
Dog = Creature("Dog", 50, 10)
Goblin = Creature("Goblin", 100, 100)

creature_list = [Squirrel, Dog, Goblin]

def get_creature():
    return random.choice(creature_list)
current_target = get_creature()
print("The current target is %s, and has %s, and %s"
 % (current_target.name, current_target.attr1, current_target.attr2))