在threading模块中,像RLock、Semaphore和Event这样的名称都是工厂函数,而实现类的名称则以下划线为前缀。这些工厂函数只是将它们收到的所有参数传递给底层构造函数。那么这样做有什么好处呢?
线程SIG档案似乎已经从互联网上消失了(*), 但我很确定它是为了防止你继承那些不打算被继承的东西(你真的不想意外破坏同步原语), 而且该模块足够旧,以至于当它被添加时你不能使用新式类技巧来做到这一点。同时请注意,例如RLock有多个实现类。*) 好吧,我在希腊的一个FTP服务器上找到了一些残留物,但那里没有原始规格说明。
没有真正的优势。 Guido在1998年添加了该模块;第一个修订版已经包括了这些工厂函数。也许他对这些工厂函数有计划,也许他正在查看Java实现并复制一些惯用语,也许他想通过在他的头脑中重新实现C来使事情可插拔。 我们只能猜测,或直接问Guido。