オブジェクトの完全なタイプを印刷したい
例えば:
# 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"
Pythonのコンテナオブジェクトには、任意のタイプのオブジェクト、さらには混合タイプを含めることができます。これは、コンテナが含まれるオブジェクトのタイプとともに宣言する必要がある静的に型付けされた言語とは異なります。Pythonでオブジェクトの「フルタイプ」が何であるかを尋ねるのは実際には何の意味もありません。つまり、整数を含むリストインスタンスと文字列を含む別のインスタンスの唯一の違いは、その内容です。
ただし、これを出力する関数が本当に必要な場合は、次のようにします。
def full_type(obj):
return "%r of " % type(obj) + ','.join('%r' % t for t in set([type(o) for o in obj]))
すべてのアイテムが同じタイプである 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'>"