51 votes

Réattribution d'un nom à soi-même

Avis ces lignes en multiprocessing des bibliothèques standard :

dict = dict
list = list

Quel est l'intérêt de rebondir sur des noms déjà disponibles sur __builtins__ dans le champ d'application du module ? Quel est l'objectif à atteindre ? J'ai cherché une explication dans les commentaires de git, mais ce commit était important et il n'y avait pas de commentaire pertinent.

50voto

user2357112 Points 37737

Ce code apparaît dans multiprocessing.dummy , une "fausse" version de multiprocessing qui met en œuvre la fonctionnalité avec des threads. Si vous regardez quelques lignes plus bas, vous verrez

def Manager():
    return sys.modules[__name__]

multiprocessing.dummy met en œuvre Manager comme une fonction qui renvoie simplement le multiprocessing.dummy lui-même, de sorte que le module multiprocessing.dummy doit fournir l'API d'un objet Manager multiprocessing. Les lignes

dict = dict
list = list

copier les liaisons pour le dict y list de l'espace de noms des builtins dans l'espace de noms du module, de sorte que vous pouvez faire

m = multiprocessing.dummy.Manager()
d = m.dict()

comme si vous aviez un vrai multiprocessing.Manager() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X