擅长:python、mysql、java
<p>仍然可以使用实例的<code>__class__</code>属性获取对<code>Tester</code>的引用。所以在<code>some_method_here</code>内部,您可以调用<code>super(self.__class__, self).run()</code>,然后运行自己的代码。这样,每当对该特定对象调用<code>run</code>时,它仍将执行<code>Tester.run</code>中的所有代码以及您在函数中添加的任何内容。你知道吗</p>
<pre><code>def some_method_here(self):
# execute all your code ...
print '200 instead but do not print 100'
super(self.__class__, self).run()
</code></pre>
<p>但是在您的示例中,当它调用<code>super</code>时,它仍然会打印<code>100</code>,因为您是在自己的代码之后执行<code>Tester.run</code>。你知道吗</p>
<p>也就是说,你会看到的</p>
<pre><code>200 instead but do not print 100
100
</code></pre>
<p>在日志中。你知道吗</p>
<p>如果您只希望它打印200行(即不执行<code>Tester.run</code>中的代码),那么首先不要调用<code>super</code>。你知道吗</p>
<p>而且,<code>super</code>只在调用从<code>object</code>继承的类时起作用,所以请注意这一点。如果<code>Tester</code>不是从对象继承的,则不能对其调用<code>super</code>。你知道吗</p>
<p><br/>
顺便说一下,您不能使用<code>tester.run = some_method_here</code>直接分配方法,因为<code>some_method_here</code>不会接收<code>self</code>参数。您必须使用<code>types</code>模块执行<code>tester.run = types.MethodType(some_method_here, tester)</code>。你知道吗</p>