如何在Python中检查变量是否为特定类?

35

我有一个变量 "myvar",当我打印它的 type(myvar) 时,输出是:

<class 'my.object.kind'>
如果我有一个包含字符串和该类变量的10个变量列表.. 我该如何构建一个if语句来检查列表"mylist"中的对象是否为<type 'my.object.kind'>
如果我有一个包含字符串和这种变量的10个变量列表,我该如何构建一个if语句来检查列表“mylist”中的对象是否为<type 'my.object.kind'>

你的意图不是很清楚。你是想查看列表中是否包含 my.object.kind 类型的元素吗?还是想获取列表中所有元素的类型? - user2357112
isinstance()是你要寻找的Python内置函数。http://docs.python.org/2/library/functions.html#isinstance - Jonathan Vanasco
有关编程的内容翻译:相关问题 type 和 isinstance 有什么区别 - snakecharmerb
3个回答

57

使用isinstance函数,即使是子类的实例,它也会返回True:

if isinstance(x, my.object.kind)
或:
type(x) == my.object.kind #3.x

如果您想测试列表中的所有内容:

if any(isinstance(x, my.object.kind) for x in alist)

该帖子询问如何将此方法应用于列表。 - Owen
1
@zhangyangyu 我有一个 type(x) 显示 <class 'argparse.Namespace'> 但是 type(x) == argparse.Namespace.kind 报错 *** AttributeError: type object 'Namespace' has no attribute 'kind' - SebMa
@SebMa my.object.kind 是 OP 所拥有的类,而不是指示类型的属性。您应该使用 type(x) == argparse.Namespace - zhangyangyu

0

尝试

if any([isinstance(x, my.object.kind) for x in mylist]):
    print "found"

0
if any(map(lambda x: isinstance(x, my.object.kind), my_list_of_objects)):
    print "Found one!"

6
不需要使用maplambda,可以使用生成器推导式。 - tobyodavies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接