如何在Python3中测试对象是否具有类型odict_值?
在一个项目中,我有一个通用函数,它可以将不同的数据类型作为输入数据。在将项目迁移到Python 3时,我遇到了一个问题,即如何在Python3中测试对象是否具有类型odict_值?,python,python-3.x,types,ordereddictionary,Python,Python 3.x,Types,Ordereddictionary,在一个项目中,我有一个通用函数,它可以将不同的数据类型作为输入数据。在将项目迁移到Python 3时,我遇到了一个问题,即odict\u值。我需要将它们转换为列表,不幸的是,并非所有数据类型都应该转换。所以我决定这样做: if isinstance(data, odict_values): data = list(data) 但是我得到了一个错误-未定义的变量odict_值。我不明白我应该提供什么作为isinstance的第二个论点。如果我使用类型(数据),我可以清楚地看到。到目前为止
odict\u值
。我需要将它们转换为列表,不幸的是,并非所有数据类型都应该转换。所以我决定这样做:
if isinstance(data, odict_values):
data = list(data)
但是我得到了一个错误-未定义的变量odict_值。我不明白我应该提供什么作为isinstance的第二个论点。如果我使用类型(数据)
,我可以清楚地看到
。到目前为止,我提出的最佳解决方案是:
str(类型(数据))==“”
但是感觉不对。在内置类型中或在
集合
模块中都无法访问odict\u值
类型
这意味着您必须自己定义它:
从集合导入订单数据
odict_values=类型(OrderedDict().values())
您可以(也可能应该)使用比odict\u值
更具描述性的名称来表示此类型
但是,您可以将此类型用作isinstance
检查的第二个参数:
isinstance({1: 1}.values(), odict_values) # False
isinstance(OrderedDict([(1, 1)]).values(), odict_values) # True
如果您想要一个更通用的测试,如果它是映射值的视图(如
dict
和orderedict
),那么您可以使用抽象基类:
odict\u值
类型在内置类型中以及集合
模块中都不可访问
这意味着您必须自己定义它:
从集合导入订单数据
odict_values=类型(OrderedDict().values())
您可以(也可能应该)使用比odict\u值
更具描述性的名称来表示此类型
但是,您可以将此类型用作isinstance
检查的第二个参数:
isinstance({1: 1}.values(), odict_values) # False
isinstance(OrderedDict([(1, 1)]).values(), odict_values) # True
如果您想要一个更通用的测试,如果它是映射值的视图(如
dict
和orderedict
),那么您可以使用抽象基类: