擅长:python、mysql、java
<p>不能在实例上使用monkeypatch <code>__iter__(self)</code>或扩展为<code>next(self)</code>,因为这些方法被视为类方法,而不是CPython内部优化(请参见<a href="http://docs.python.org/reference/datamodel.html#special-method-lookup-for-new-style-classes" rel="nofollow">Special method lookup for new-style classes</a>以了解其原因)。在</p>
<p>如果需要monkeypatch这些方法,则需要直接在类上设置它们:</p>
<pre><code>class DerivedO(BaseClass):
def __init__(self):
self.new_count = 2
self.__class__.next = self.__class__.new_next
def new_next(self):
if self.new_count:
self.new_count -= 1
return None
else:
raise StopIteration
</code></pre>
<p>上面的方法可以工作;请注意,我将<code>__class__.next</code>设置为<em>unbound</em>函数<code>new_next</code>,而不是绑定方法。在</p>