擅长:python、mysql、java
<p>你还远远没有用你的代码正确地将<code>property</code>子类化:这一次
您重写了一些方法,但从不关心调用上游方法,这样它就可以完成自己的业务。你知道吗</p>
<p>并不是说不能这样做,如果你真的在你的子类中重现了超类上的方法将要执行的所有行为-但是即使不看超类的代码(在cPython的例子中是在本机代码中)-你也可以看到要么<code>self.func</code>是getter函数,要么是setter函数-不能两者兼而有之。你知道吗</p>
<p>如果您只想注释将要使用的属性并执行所需的操作,并将其余部分委托给原始代码,那么这将非常有用
可能只是工作:</p>
<pre><code>class atomic_property(property):
def __init__(self,*args, **kw):
super(atomic_property, self).__init__(*args, **kw)
self.lock = threading.Lock()
def __get__(self, obj, obj_type):
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>