可使用内置函数 isinstance(obj, cls)
。 你可以提供一个元组而不是单个类来检查某个对象是否为任意多个类当中某一个类的实例,例如 isinstance(obj, (class1, class2, ...))
,也可以检查某个对象是否为 Python 内置类型当中某一个类型的对象,例如 isinstance(obj, str)
或 isinstance(obj, (int, float, complex))
。
请注意大多数程序不会经常对用户自定义类使用 isinstance()
。 如果是你自已开发的类,更正确的面向对象风格是在类中定义方法来封装特定的行为,而不是检查对象的类并根据它属于什么类来做不同的事。 例如,如果你有一个执行某些操作的函数:
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Mailbox</span><span class="p">):</span>
<span class="o">...</span> <span class="c1"># code to search a mailbox</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Document</span><span class="p">):</span>
<span class="o">...</span> <span class="c1"># code to search a document</span>
<span class="k">elif</span> <span class="o">...</span>
www#gaodaima.com来源gaodaima#com搞(代@码网搞代码
更好的方法是在所有类上定义一个 search()
方法,然后调用它:
<span class="k">class</span> <span class="nc">Mailbox</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="o">...</span> <span class="c1"># code to search a mailbox</span>
<span class="k">class</span> <span class="nc">Document</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="o">...</span> <span class="c1"># code to search a document</span>
<span class="n">obj</span><span class="o">.</span><span class="n">search</span><span class="p">()</span>
来源:搞代码网:原文地址:https://www.gaodaima.com