擅长:python、mysql、java
<p>如果<code>types</code>中的值是明显的,我建议您尽可能避免使用这些值;因此对于将方法绑定到对象之类的内容,请使用<code>types.MethodType</code>,而对于<code>types.StringTypes</code>则使用<code>(str, unicode)</code>或<code>basestring</code>。</p>
<p>在这种情况下,我会这样做:</p>
<ul>
<li>使用<code>obj is None</code>或<code>obj is not None</code>,而不是<code>isinstance(obj, NoneType)</code>或<code>not isinstance(obj, NoneType)</code>。</li>
<li>使用<code>isinstance(obj, basestring)</code>而不是<code>isinstance(obj, StringTypes)</code></li>
<li>使用<code>isinstance(obj, str)</code>而不是<code>isinstance(obj, StringType)</code></li>
</ul>
<p>然后,当您需要为Python 3分发时,使用<code>2to3</code>。然后你的<code>basestring</code>将变成<code>str</code>,剩下的将继续像以前那样工作。</p>
<p>(还要记住,特别是<code>StringType</code>和<code>StringTypes</code>之间的区别:</p>
<pre><code>types.UnicodeType == unicode
types.StringType == str
types.StringTypes == (str, unicode)
</code></pre>
<p>(第页)</p>