擅长:python、mysql、java
<p>容器项的类型对于容器本身的类型是不透明的。但是,您可以为实现<code>__iter__</code>的东西制作自己的:</p>
<pre class="lang-py prettyprint-override"><code>def extended_type(x):
types = set()
if hasattr(x, "__iter__"):
for item in x:
if item == x:
# prevent strings from infinitely recursing
continue
types.add(extended_type(item))
contains = ""
if len(types) > 0:
contains = " containing " + ", ".join(types)
return f"<class '{type(x).__name__}'{contains}>"
return f"<class '{type(x).__name__}'>"
extended_type([(1, 2, 'a'), {1: 2}])
# "<class 'list' containing <class 'tuple' containing <class 'str'>, <class 'int'>>, <class 'dict' containing <class 'int'>>>"
</code></pre>