python中的完整类型的对象

时间:2012-05-19 21:09:41

标签: python django types

我想要打印完整类型的对象

例如:

# 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"

2 个答案:

答案 0 :(得分: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]))

答案 1 :(得分:1)

如果你只打算在每个项目都是同一类型的iterables上使用它,那么这是一个开始:

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'>"