擅长:python、mysql、java
<p>Python是动态类型的。也就是说当你写作的时候</p>
<pre><code>def __init__(self, value):
self.value = value
self.transformed_value = self.create_value(value)
</code></pre>
<p>在计算<code>self.create_value</code>时,is与该方法属于哪个类无关:它只与调用该方法时<code>self</code>的<em>类型</em>有关。你知道吗</p>
<p>当您调用<code>SubClass(3)</code>时,最终会调用<code>SubClass.__init__</code>,它会立即使用<code>SubClass</code>类型的参数调用<code>BaseClass.__init__</code>。既然<code>SubClass.create_value</code>是定义的,那就是<code>self.create_value</code>的解析。你知道吗</p>
<p>如果出于任何原因,您坚持<code>BaseClass.__init__</code>在其<code>self</code>参数上调用<code>BaseClass.create_value</code>,则必须显式地使用<code>BaseClass.create_value(self, value)</code>。然而,这很少是个好主意。如果<code>self</code>的类型希望调用它重写的方法,那么通过使用<code>super</code>本身,这就是它的责任:</p>
<pre><code>def create_value(self, value):
rv = super().create_value()
print("sub")
return value + 2 # Or perhaps do something with rv first?
</code></pre>