gpt4 book ai didi

python - 扩展 Python 队列的正确方法?

转载 作者:太空狗 更新时间:2023-10-30 01:23:53 27 4
gpt4 key购买 nike

我正在编写 Queue.Queue 的自定义子类,遇到这样一种情况:当我的自定义 put() 被调用时,我需要获取队列级锁。我想重用现有的 Queue 锁 (Queue.mutex),但不能,因为它不是 RLock

在源代码(python 2.6)中,它说:

# Override these methods [_put, _get, etc] to implement other queue organizations
# (e.g. stack or priority queue).
# These will only be called with appropriate locks held

但是在线文档没有提到覆盖它们。该模块中的其他 Queue 实现覆盖了这些。所以,我有点倾向于相信 _put 方法是包私有(private)的,并不是真正打算在 Queue 模块之外使用。

有谁知道在我自己的子类中使用 Queue._put 和 friend 会怎么样?

最佳答案

就我而言,它完全符合犹太洁食标准。在 Python 中,the source is the documentation ,或者至少应该被视为对已发布的 API 文档的补充。这主要是强制使用空格和编码约定的结果 emphasize clear, readable code : 当您有文档没有回答的问题时,您应该能够转到源代码并查找答案。

特别是,像这样的细节与 Queue 模块的大多数客户(他们只是使用类)无关,所以他们不会把它变成已发布的文档。但是,如果您想子类化 Queue,开发人员希望您深入挖掘,因此源代码中有注释供您查找。

我还要提到,Python 并没有真正的“包私有(private)”概念。从语义上讲,同一模块中的子类与不同模块中的子类没有区别,即使是您自己编写的子类。事实上,Python 甚至没有“私有(private)”的概念。相反,它依赖于负责任的使用原则:作为开发人员,您应该足够聪明,不要在不需要时使用内部方法。以下划线开头的成员名称只是一个线索,表明它是一个内部方法,如果您只是使用该类,您可能不应该访问它 - 但如果您将其子类化,一切皆有可能。

关于python - 扩展 Python 队列的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com