J'apprends Python en lisant Dive Into Python en ligne, et au chapitre 2, je vois que vous pouvez utiliser l'attribut __name__
à des fins de test, donc je me demandais si quelqu'un connaissait d'autres utilisations pour cet attribut ? MerciAutres utilisations de l'attribut __name__
Répondre
J'ai déjà eu un décorateur pour un fichier de script de ligne de commande.
Le décorateur a été utilisé comme ceci:
@command
def someFunc():
# code goes here
Le décorateur a fait quelque chose comme ceci:
commands = {}
def command(func)
commands[func.__name__] = func
return func
Et puis je pouvais faire quelque chose comme ceci:
commandName = raw_input()
commands[commandName]();
qui lirait le nom d'une commande de la console et l'appelait - si elle était étiquetée avec le décorateur avant (donc pas les appels dangereux seraient possibles comme avec input
).
(Dans mon code, le nom a été tiré de la args de ligne de commande, pas raw_input
.)
Cela me laisse facilement fournir des commandes accessibles via leur nom. C'est l'une des utilisations - une règle générale serait "c'est utile quand vous voulez ajouter votre propre sémantique à la notion de définition de fonction". La même chose vaut pour les décorateurs en général.
(BTW, il y a champ func.func_name
, qui est plus correct à utiliser que func.__name__
parce que les identificateurs commençant par __
sont censés être privés en Python, autant que je sache - un détail mineur)
Il peut être très utile lors du débogage. Lorsque vous écrivez des frameworks (ou tout autre logiciel très générique), vous pouvez facilement déboguer en utilisant le name pour savoir ce qui se passe.
- 1. L'équivalent PHP de Python __name__ == "__main__"?
- 2. Utilisations maladroites de Contract.ValueAtReturn()
- 3. Utilisations de ThreadLocal
- 4. Utilisations de std :: basic_string
- 5. Pourquoi fait-il cela? si - __name__ == '__main__'
- 6. Utilisations de l'opérateur de module
- 7. utilisations de « pour » en Java
- 8. Utilisations de Ruby on Rails
- 9. Utilisations pratiques de MethodRental Class?
- 10. Quel est l'équivalent clojure de l'idiome Python "if __name__ == '__main__'"?
- 11. Utilisations intelligentes des scripts d'éditeur de liens?
- 12. JMS - Utilisations courantes
- 13. Utilisations intéressantes d'interfaces fluides?
- 14. Utilisation du stockage de la base de données pour des utilisations autres que les applications hors ligne
- 15. Utilisations pour les suites Scala
- 16. Utilisations valides des paramètres implicites
- 17. UTF-8 utilisations et alternatives
- 18. Utilisations pratiques de la théorie floue?
- 19. Bonnes utilisations de la méthode finalize()
- 20. Utilisations de faits non-terrain dans Prolog?
- 21. Quelles sont les utilisations acceptables de goto?
- 22. Les utilisations modernes pour les cartes d'image
- 23. Utilisations pour les schémas SQL Server
- 24. Projet large "Supprimer et trier les utilisations"
- 25. VS2008 ajouter automatiquement les utilisations désactiver
- 26. # directive pragma et ses utilisations dans c
- 27. Quelles sont les différentes valeurs possibles de __name__ dans un script Python, et que signifient-elles?
- 28. Autres problèmes de Mod_rewrite
- 29. Autres structures de contrôle
- 30. Où sont les utilisations intelligentes de l'évaluation stricte?
Très bien, j'ai encore besoin de bien comprendre ce que vous avez dit, merci pour le conseil func.func_name. –
Notez que c'est __name__' sur une fonction; le '__name__' que vous avez trouvé en premier était sur un module, indiquant son nom comme importé, ou' '__main __' 'pour le module appelé initial; dans tous les cas, 'sys.modules [__ name __]' est le module courant. –