2

我想打印一个对象的完整类型

例如:

# 1
print full_type(['a','b','c']) # output: "list of str"

# 2
x = book.objects.filter(user=user) # Django Query Set
print full_type(x) # output: "QuerySet of book"
4

2 回答 2

4

Python 中的容器对象可以包含任何类型的对象,甚至是混合类型。这与静态类型语言不同,在静态类型语言中,容器必须与其包含的对象类型一起声明。在 Python 中询问对象的“完整类型”是什么并没有任何意义。换句话说,包含整数的列表实例和包含字符串的另一个实例之间的唯一区别是它们的内容。

但是,如果您真的想要一个函数将其打印出来,则可以这样做:

def full_type(obj):
    return "%r of " % type(obj) + ','.join('%r' % t for t in set([type(o) for o in obj]))
于 2012-05-19T21:18:37.607 回答
1

如果您只打算在每个项目都是相同类型的可迭代对象上使用它,那么这里是一个开始:

In [6]: mylist = ['a','b','c']

In [15]: def full_type(thing):
   ....:     if not hasattr(thing, '__contains__'):
   ....:         return type(thing)
   ....:     else:
   ....:         return '{0} of {1}'.format(type(thing), type(thing[0]))
   ....:     

In [16]: full_type(mylist)
Out[16]: "<type 'list'> of <type 'str'>"
于 2012-05-19T21:21:50.977 回答