2013-07-25 66 views
9

threading模塊中,像RLock,SemaphoreEvent這樣的名稱都是工廠函數,而實現類的名稱前面加下劃線。爲什麼Python線程模塊中的類會暴露工廠函數而不是構造函數?

工廠函數只是將它們收到的所有參數傳遞給底層構造函數。

那麼這樣做的好處是什麼?

+2

我的猜測是傳統的;該模塊非常古老。 –

+0

@MartijnPieters是這樣嗎?我仍然在我的機器上使用Python2.7。 – satoru

+0

1998年,線程被添加到庫中;我認爲Python 1.5.1是第一個包含它的人。 –

回答

2

有沒有真正的優勢。

Guido added the module 1998;第一個版本已經包含了這些工廠功能。也許他對這些工廠的功能規劃,也許他在看的Java實現,並複製了一些成語,也許他想的事情可插拔在他的後腦勺一個C重新實施。

我們只能猜測,或直接詢問Guido。

3

線程-SIG檔案似乎已經從因特網(*)消失了,但我敢肯定它阻止你沒有被設計爲子類子類的東西(你真的不想要打破同步基本意外),並且該模塊已經足夠老了,以至於在添加新模式時,您無法使用新風格的欺騙手段。

還要注意,例如RLock有多個實現類。

*)好的,我在希臘的FTP服務器上發現了一些殘留物,但沒有原始規格。

+0

從什麼時候開始Python(及其庫)試圖防止人們做出奇怪的事情? – glglgl

+0

既然總是?畢竟,它是軟件,因此「預防」意味着「讓它變得更難」,而不是「使之變得不可能」。一個顯而易見的方法去做,等 – Fredrik

+0

好了,但儘管如此,它是Python的通常行爲。例如,沒有私有或受保護的類屬性,因爲「成年」程序員不需要它們。 (至少,他們這樣說)。然後這是不道德的,並且不會阻止從'RLock'繼承。因人而異。 – glglgl

相關問題