我正在学习 Python。仔细,饶有兴致。很长一段时间以来,我都试图理解带有 RLock() 类型组合的示例是如何工作的,而无需稍后在文本中调用必要的 lock.acquire() 和 lock.release() 方法。我在 RLock 或 docs-python.ru/ 上的描述中没有看到任何迹象。最终在谷歌上搜索到“在这种情况下,with 语句在进入时调用 lock.acquire(),在退出时调用 lock.release()。” ( https://digitology.tech/posts/kontekstnye-managery-v-python/ ) Phyton 的学生应该如何自己(用他们的大脑)理解这一点?这从何而来?(如果答案涉及潜在的类似问题,那就太好了)
代码示例:
class Example1:
def __init__(self):
self.lock = RLock()
def example_of_method (self):
with self.lock:
print ('lock.acquire() was just called somehow')
这在文档中有所描述。在关于 RLock的部分 ,最后一段:
这是一个链接,通过示例对其进行了详细说明:
好吧,即使这也可以纯粹从逻辑上理解。使用上下文管理器
with时,进入块时,调用方法__enter__,退出时__exit__。然后你需要看看 - 这些方法中究竟调用了什么。您可以查看库的源代码并看到两者都在那里调用acquire,release或者您可以dir()查看它们有哪些公共方法self.lock,发现实际上只有其中两个方法,并且在进入时应该调用其中一个。块,另一个在退出时。在这种情况下没有选项,通过创建的对象RLock()根本没有任何其他公共方法可以调用。