2013-07-25 4 views
9

Im Modul threading sind Namen wie RLock, Semaphore und Event Factory-Funktionen, während dem Namen der Implementierungsklassen die Unterstriche vorangestellt sind.Warum stellen Klassen im Python-Threading-Modul Factory-Funktionen statt Konstruktoren zur Verfügung?

Die Factory-Funktionen übergeben nur alle Argumente an die zugrunde liegenden Konstruktoren.

Was ist der Vorteil, dies zu tun?

+2

Meine Vermutung ist Erbe; Das Modul ist ziemlich alt. –

+0

@MartijnPieters Ist es so? Ich verwende immer noch Python2.7 auf meinem Rechner. – satoru

+0

'threading' wurde 1998 der Bibliothek hinzugefügt; Ich denke, Python Version 1.5.1 war die erste, die es enthielt. –

Antwort

2

Es gibt keinen wirklichen Vorteil.

Guido added the module 1998; Die erste Revision enthält bereits diese Factory-Funktionen. Vielleicht hatte er Pläne für diese Factory-Funktionen, vielleicht schaute er sich die Java-Implementierung an und kopierte einige Idiome, vielleicht wollte er die Dinge steckbar machen mit einer C-Re-Implementierung in seinem Hinterkopf.

Wir können nur raten oder Guido direkt fragen.

3

Die Thread-sig-Archive scheinen aus dem Internet verschwunden zu sein (*), aber ich bin ziemlich sicher, dass es Sie davon abhält, Dinge zu unterklassieren, die nicht unterklassifiziert sind (Sie wollen die Synchronisation wirklich nicht unterbrechen) Primitive durch Zufall), und das Modul ist alt genug, dass Sie das nicht mit neuartigen Klassentricks machen konnten, als es hinzugefügt wurde.

Beachten Sie auch, dass z.B. RLock hat mehrere Implementierungsklassen.

*) Nun, ich habe einige Überreste auf einem FTP-Server in Griechenland gefunden, aber das hatte nicht die ursprüngliche Spezifikation.

+0

Seit wann versucht Python (und seine Bibliothek) zu verhindern, dass Leute seltsame Dinge tun? – glglgl

+0

Seit immer? Es ist schließlich Software, also "verhindern" bedeutet "mach es ein bisschen härter", nicht "mache es unmöglich". Ein offensichtlicher Weg, um es zu tun, usw. – Fredrik

+0

Ok, aber dennoch ist es normales Verhalten für Python. Zum Beispiel gibt es keine privaten oder geschützten Klassenattribute, weil ein "erwachsener" Programmierer sie nicht benötigt. (Zumindest sagen sie das.) Dann ist es unlogisch und unkonsequent, das Erben von 'RLock' zu verhindern. YMMV. – glglgl

Verwandte Themen