擅长:python、mysql、java
<p>正如您所注意到的,如果您将共享锁公开为类属性,那么这些锁将由子类共享。在</p>
<p>您可以通过重新定义每个子类上的锁来解决这个问题:</p>
<pre><code>class B(A):
sharedLock = threading.Lock()
</code></pre>
<p>您甚至可以使用元类来实现这一点(请不要)。在我看来,你从一个错误的角度来看待这个项目。在</p>
<p>如果<strong>将锁显式地分配给实例</strong>(而不是类),则此任务更容易完成。在</p>
^{pr2}$
<p>当然,您会遇到一个“问题”,即必须显式地为每个实例传递锁。传统上,这是使用<a href="https://en.wikipedia.org/wiki/Factory_method_pattern" rel="nofollow">factory pattern</a>来解决的,但是在python中,您可以简单地正确地使用函数:</p>
<pre><code>from functools import partial
A_with_mylock= partial(A, my_lock)
a2= A_with_mylock()
</code></pre>