为什么Python线程模块中的类会公开工厂函数而不是构造函数?

时间:2013-07-25 09:12:12

标签: python

threading模块中,RLockSemaphoreEvent等名称都是工厂函数,而实现类的名称则以下划线为前缀。

工厂函数只是将它们收到的所有参数传递给底层构造函数。

那么这样做有什么好处?

2 个答案:

答案 0 :(得分:4)

线程sig档案似乎已经从Internet上消失了(*),但是我很确定它会阻止你对未设计为子类的东西进行子类化(你真的不想破坏同步原语偶然的),模块已经足够大,以至于在添加它时你不能用新式的类技巧来做。

另请注意,例如RLock有多个实现类。

*)好吧,我在希腊的FTP服务器上发现了一些残余物,但是没有原始规格。

答案 1 :(得分:2)

没有真正的优势。

Guido added the module 1998;第一个修订版已包含那些工厂功能。也许他有这些工厂功能的计划,也许他正在研究Java的实现并复制了一些习惯用语,也许他想在后面用C重新实现可以插件。

我们只能猜测,或直接询问Guido。