Python的:如何检查的对象是namedtuple的实例?

我该如何检查,如果对象是一个命名元组的一个实例?

--------------解决方案-------------

调用函数collections.namedtuple为您提供了一个新的类型的子类tuple (没有其他类)与成员名为_fields这是一个元组的项目都是字符串。 所以,你可以检查每一个这些事情:

def isnamedtupleinstance(x):
t = type(x)
b = t.__bases__
if len(b) != 1 or b[0] != tuple: return False
f = getattr(t, '_fields', None)
if not isinstance(f, tuple): return False
return all(type(n)==str for n in f)

有可能得到这样的假阳性,但只有当有人在走出去的方式,使一个类型, 看起来很像一个名为元组,但不是一;-)。

如果您需要检查调用namedtuple特定功能之前,那么就打电话给他们,并捕获异常来代替。 这是首选的方法来做到这一点的蟒蛇。

我用

isinstance(x, tuple) and isinstance(x.__dict__, collections.abc.Mapping)

这对我似乎最能反映的命名为元组的性质的字典方面。 看来强大的对一些可以预见的将来也会发生变化,也可能与许多第三方namedtuple十岁上下班工作,如果这样的事情发生存在。

分类:蟒蛇 时间:2015-03-15 人气:0
本文关键词: 蟒蛇,自省,namedtuple
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.399 (s). 10 q(s)