擅长:python、mysql、java
<blockquote>
<p>I want <strong>inherit parent share variables</strong> except <strong>shared parent locks</strong></p>
</blockquote>
<p>你不能这样做。它使访问“共享变量”不是线程安全的。在</p>
<hr/>
<p><code>sharedLock</code>保护<code>shared</code>变量。如果相同的<code>shared</code>变量可以在递归调用中修改,那么您需要<code>RLock()</code>。这里<code>shared</code>表示在所有子类之间共享。在</p>
<p>看起来您希望使用独立函数(或静态方法)而不是classmethod:</p>
<pre><code>def getIncremented(_lock=Lock(), _shared=[0]):
with _lock:
_shared[0] += 1
return _shared[0]
</code></pre>
<p>因此,所有类都使用相同的<code>shared</code>变量(以及相应的<code>lock</code>)。在</p>
<p>如果希望每个类都有自己的<code>shared</code>变量(这里<code>shared</code>表示在这个特定类的实例之间共享),那么不要使用可能遍历祖先的<code>cls.shared</code>来获取它。在</p>
<p>为了暗示子类不应该直接使用变量,可以使用私有变量的语法:</p>
^{pr2}$
<p>如果子类重写了使用<code>__shared</code>的方法,那么它不会在代码中意外地直接使用<code>A.__shared</code>。在</p>