Question

    

Cette question a déjà une réponse ici:

         

Y at-il un moyen de faire une fonction de classe unoverriddable? quelque chose comme le mot-clé final java. i.e., toute classe dominante ne peut pas remplacer cette méthode.

Était-ce utile?

La solution

Le problème est que vous essayez d'écrire en Python en utilisant les philosophies Java. Quelque chose report, mais pas tous. En Python, vous pouvez faire ce qui suit et il est tout à fait bien, mais va complètement contre la façon dont Java pense des objets.

class Thing(object):
    x = 1
something = Thing()
something.y = something.x

Si vous le voulez vraiment, vous pouvez essayer le le code affiché ici . Mais comme vous pouvez le voir il y a beaucoup de code là pour lui faire faire ce que vous voulez. Il convient de noter également que même la personne qui a affiché le code dit qu'il peut être en utilisant __dict__ passé ou object.__setattr__.

Autres conseils

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.

Oui, il y a, ne pas le faire.

Je dois ajouter à cela après le vote vers le bas. De tels mécanismes de protection sont considérés par certains d'aller contre la philosophie de Python, que « nous sommes tous adultes consentants ici » .Qui ne voulez-vous protéger ces fonctions à partir? Et si un commentaire ne suffira pas pourquoi quelque chose serait « plus fort »?

Je documentez vos attentes et attendre d'autres programmeurs à agir de manière responsable.

En utilisant un double underscore avant une méthode dans une classe est non seulement une convention de nommage. Ce faisant, le nom de la méthode est mutilée avec classname(_classname__methodname()).

En héritant d'une classe avec un procédé ayant des doubles traits de soulignement en face de celui-ci, car la classe enfant il devient difficile de remplacer la méthode spécifiée ci-dessus. Cette pratique est presque équivalent à la finale en java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top