擅长:python、mysql、java
<p>似乎使用<code>property.setter</code>再次调用<code>__init__</code>,这看起来很奇怪(再次初始化同一个对象?)你知道吗</p>
<p>不管怎样,你需要让<code>property</code>做它的工作,如果你根本不使用<code>property.__init__</code>,你怎么能期望它正常工作呢?你可以这样做,例如:</p>
<pre><code>class atomic_property(property):
def __init__(self, *args, **kwargs):
#print(args,kwargs) #uncomment to see this be called again when using .setter !
super(atomic_property,self).__init__(*args,**kwargs)
self.lock = threading.Lock()
def __get__(self, obj, objtype=None):
with self.lock:
return super(atomic_property,self).__get__(obj,objtype)
def __set__(self, obj, value):
with self.lock:
return super(atomic_property,self).__set__(obj,value)
</code></pre>