我可以用Python中的变量引用类实例吗?

我可以用Python中的变量引用类实例吗?,python,Python,我有一个类实例列表,我想在运行时使用变量集检查列表中是否有特定的实例 class Animal(): def __init__(self, name): self.name = name cat = Animal('cat') dog = Animal('dog') fish = Animal('fish') animals = [cat, dog, fish] assert dog in animals # True target = 'dog' assert

我有一个类实例列表,我想在运行时使用变量集检查列表中是否有特定的实例

class Animal():
    def __init__(self, name):
        self.name = name

cat = Animal('cat')
dog = Animal('dog')
fish = Animal('fish')

animals = [cat, dog, fish]

assert dog in animals # True

target = 'dog'
assert target in animals # Error

这可以做到吗?

dog
是动物类的一个实例

您可以尝试循环遍历每个类,获得
.name
并进行如下比较:

class Animal():
定义初始化(self,name):
self.name=名称
猫=动物(“猫”)
狗=动物(“狗”)
鱼=动物(“鱼”)
动物=[猫、狗、鱼]
在动物身上断言狗是真的
目标=‘狗’
对于动物中的_类obj:
打印(目标==类对象名称)

可能类似于
在地图中断言目标(lambda animal:animal.name,animals)
目标='dog'
当前与
动物
实例
dog
完全没有连接。如果您适当地实现了
\uuuu eq\uuuu
,您可以在动物中执行例如
动物(目标)
,或者您可以创建一个
.name
的列表/集合并将其签入。当然,您可以使用变量引用类实例。在Python中,可以分配给变量的所有内容都是一个类实例,事实上,不可能做任何其他事情。您的问题是,使用
target=“dog”
时,您引用的是
str
的实例,而不是
Animal
的实例。您的意思是
target=dog
?您可以在类中添加
def\uu eq\uuuuuu(self,other):返回self.name==other
,但是很难猜出你到底想要什么。另一个类似的选择是按名称将动物存储在
目录中,而不是一个列表:
动物={animal.name:animal for animal in animals}