擅长:python、mysql、java
<p>Python和类型检查不在一起。学会接受它。使用代码传递正确类型的人的工作。记录代码的期望值,但不要显式检查。在</p>
<p>除了列表和元组,还有其他集合。你为什么要禁止,比如说,<a href="http://docs.python.org/dev/library/collections.html#collections.namedtuple" rel="nofollow">namedtuple</a>?Python是一种动态语言,不要通过编写类型检查来对抗它。在</p>
<p>在Python词汇表中查找<a href="http://docs.python.org/glossary.html#term-eafp" rel="nofollow">EAFP</a>。不要试图预测错误,要及时处理。在</p>
<hr/>
<p>一个合理的替代类型检查的方法是转换成一个列表:</p>
<pre><code>self.__teams = list(tms)
</code></pre>
<p>列出不兼容的类型将导致在此行引发一个异常,从现在起,您可以确定您正在处理的是一个列表。
(当然,这不会阻止某人为列表分配非字符串。)</p>
<hr/>
<p>哦,如果你有过的话(有充分的理由!)需要类型检查,请使用<a href="http://docs.python.org/library/functions.html#isinstance" rel="nofollow">isinstance</a>函数,而不是比较<code>type()</code>。它还将捕捉所需类型的子类。此外,尽量使用最通用的基类型。测试字符串(Unicode或其他)的正确方法是:</p>
^{pr2}$
<p>检查列表式集合的正确方法是:</p>
<pre><code>import collections
if isinstance(my_object, collections.Sequence):
...
</code></pre>
<p>但那只是一个旁白,不是你问题的适当解决办法。没有正当理由不要做类型检查。在</p>