<p>我知道这听起来可能是一个愚蠢的问题,尤其是对于了解python本质的人来说,但是我想知道,<strong>有没有一种方法可以知道一个对象是否“实现了一个接口”?</strong></p>
<p>举个我想说的例子:</p>
<p>假设我有这个函数:</p>
<pre><code>def get_counts(sequence):
counts = {}
for x in sequence:
if x in counts:
counts[x] += 1
else:
counts[x] = 1
return counts
</code></pre>
<p><strong>我的问题是:有没有办法确保传递给函数的对象是<code>iterable</code>?</strong>我知道在Java或C中,我可以通过让方法接受实现特定接口的任何对象来实现这一点,比如说(例如)<code>iIterable</code>,如下所示:<code>void get_counts(iIterable sequence)</code></p>
<p><strong>我的猜测是,在Python中,我必须使用先发制人的内省检查</strong>(可能是在<code>decorator</code>中?)如果对象没有<code>__iter__</code>属性,则抛出一个自定义<code>exception</code>)。但有没有比Python更能做到这一点的方法呢?在</p>