Existe-t-il un moyen de rendre une fonction de classe non-vérifiable? quelque chose comme le mot-clé final
de java. c'est-à-dire que toute classe dérogatoire ne peut pas remplacer cette méthode.Comment empêcher une fonction d'être surchargée dans python
Répondre
Le problème est que vous essayez d'écrire en Python en utilisant des philosophies Java. Quelque chose continue, mais pas tous. En Python vous pouvez faire ce qui suit et c'est parfaitement bien, mais va complètement à l'encontre de la façon dont Java pense aux objets.
class Thing(object):
x = 1
something = Thing()
something.y = something.x
Si vous le voulez vraiment, vous pouvez essayer le code posted here. Mais comme vous pouvez le voir il y a beaucoup de code là pour l'obtenir pour faire ce que vous voulez. Il convient également de noter que même la personne qui a posté le code dit qu'il peut être passé en utilisant __dict__
ou object.__setattr__
.
-1 Un tel code mérite le Prix commémoratif Maginot pour les mécanismes de défense futile. –
Pourquoi le -1? Je n'ai pas écrit le code auquel je me suis connecté et je n'ai pas encouragé son utilisation. Je l'ai trouvé avec une recherche google et j'ai pensé que cela m'a aidé à prouver que le fait d'essayer de faire appliquer la version finale n'est pas une bonne idée en python. – unholysampler
Pour le lier même à lui. –
Vous pouvez mettre un commentaire là-dedans à l'effet de:
# We'll fire you if you override this method.
Il est surprenant de constater à quel point des solutions low-tech comme ce travail dans la pratique.
+1 Et si cela a été découvert à partir d'un rapport de bogue de l'utilisateur, nous allons virer les wallis qui n'ont pas testé l'application correctement. –
Cela devrait faire partie des chaînes de documentation (c'est-à-dire les spécifications de l'API) plutôt qu'un commentaire – vog
Oui il y a, ne le faites pas.
Je devrais ajouter à cela après le vote négatif. De tels mécanismes de protection sont perçus par certains comme allant à l'encontre de l'éthique de Python, à savoir que «nous sommes tous des adultes consentants ici». De qui voulez-vous protéger ces fonctions? Et si un commentaire ne suffira pas, pourquoi quelque chose de «plus fort»?
Je documenterais vos attentes et m'attendrais à ce que d'autres programmeurs agissent de façon responsable.
- 1. Ajout d'un wrapper à une fonction surchargée
- 2. Comment appeler la fonction d'origine de la fonction surchargée dans une catégorie?
- 3. Appel ambigu à une fonction surchargée (variété const)
- 4. fonction surchargée en asp classique JScript
- 5. Comment C++ choisit-il quelle fonction surchargée appeler?
- 6. Comment appeler une méthode surchargée en Java?
- 7. Comment appeler une cible MSBuild surchargée
- 8. Comment utiliser une fonction surchargée comme argument du modèle de fonction?
- 9. Comment appeler la fonction surchargée correcte lors de l'exécution?
- 10. Comment empêcher l'optimisation d'une fonction
- 11. Comment forcer une méthode à être surchargée dans Java?
- 12. Python Débutant: Comment empêcher l'exécution de 'finally'?
- 13. Empêcher la fonction OpenCV CreateVideoWriter d'imprimer sur console en Python
- 14. Empêcher d'exécuter une fonction JavaScript plusieurs fois
- 15. Comment puis-je définir une chaîne dans une fonction python?
- 16. Comment importer une fonction avec python
- 17. Python Comment faire une fonction inter-module?
- 18. Héritage Python - comment désactiver une fonction
- 19. Comment prendre une fonction comme argument? (Python)
- 20. Création d'une fonction d'importation sur une procédure stockée surchargée dans Oracle, Entity Framework
- 21. Erreur de compilation dans VC++ 2010 (clean in 2008!), "Appel ambigu à une fonction surchargée"
- 22. problèmes avec les membres de la fonction surchargée C++
- 23. La fonction de thème Drupal n'est pas surchargée
- 24. Erreur: fonction surchargée sans information contextuelle de type - SetWindowLong()
- 25. Python: comment faire une fonction visible dans un programme
- 26. C++ standard, la résolution de fonction surchargée/correspondant
- 27. Réflexion AS3. Comment savoir si une méthode est surchargée?
- 28. Problème avec une fonction Python
- 29. Comment passer une variable d'une fonction à une classe python
- 30. Override surchargée WPF Thème
Vous n'avez même pas de méthodes * private * en Python, les membres de '__xxx' ne sont que des ombres. Je serais vraiment surpris s'il y avait quelque chose comme un mot-clé 'final'. – Boldewyn
Pourquoi? Quel est le cas d'utilisation pour empêcher cela? Les gens peuvent lire votre source et réécrire la fonction. Qu'essayez-vous de faire? –
Je ne sais pas pourquoi vous présumez que je le veux pour empêcher quelqu'un sinon de le surcharger - Je veux qu'il empêche moi-même de surcharger accidentellement dans le futur. En supposant que j'ai un arbre d'héritage relativement profond, et l'une des classes "plus profondes" redéfinira accidentellement la fonction (l'oubliant même existe) – olamundo