¿Hay alguna manera de hacer que una función de clase no pueda ser revertida? algo así como la palabra clave final
de java. es decir, cualquier clase superior no puede anular ese método.Cómo evitar que se anule una función en python
Respuesta
El problema es que estás tratando de escribir en Python usando filosofías Java. Algo se lleva, pero no todos. En Python puede hacer lo siguiente y está perfectamente bien, pero va completamente en contra de la forma en que Java piensa en los objetos.
class Thing(object):
x = 1
something = Thing()
something.y = something.x
Si realmente lo desea, puede probar el code posted here. Pero como puede ver, hay un montón de código allí para que haga lo que quiere. También se debe tener en cuenta que incluso la persona que publicó el código dice que se puede pasar usando __dict__
o object.__setattr__
.
-1 Tal código merece el Premio Maginot Memorial para mecanismos de defensa inútil. –
¿Por qué el -1? No escribí el código al que me vinculé y no alenté su uso. Lo encontré con una búsqueda en Google y pensé que ayudó a probar mi punto de que tratar de hacer cumplir la final no es una buena idea en Python. – unholysampler
Para incluso vincularlo. –
Se puede poner un comentario en el que hay al efecto de:
# We'll fire you if you override this method.
Es sorprendente lo bien que soluciones de baja tecnología como esto en la práctica.
+1 Y si esto se descubrió a partir de un informe de error del usuario, vamos a despedir a los wallies que no probaron la aplicación correctamente. –
Esto debería ser parte de las cadenas de documentación (es decir, especificación API) en lugar de un comentario – vog
Sí, no lo hagas.
Debo añadir a esto después del voto abajo. Dichos mecanismos de protección son vistos por algunos como contrapuestos al ethos de Python: "aquí todos consentimos adultos". ¿De quién quiere proteger tales funciones? Y si un comentario no es suficiente, ¿por qué algo 'más fuerte'?
Documentaré sus expectativas y espero que otros programadores actúen con responsabilidad.
- 1. Cómo evitar que se anule un método en C#
- 2. Evitar anulación de función en Python
- 3. Cómo evitar que WPF DataGrid anule la selección de elemento seleccionado cuando se actualizan los elementos?
- 4. ¿Puedo evitar que un método virtual heredado se anule en subclases?
- 5. ¿Cómo evitar que se desinstale una aplicación?
- 6. ¿Hay alguna forma de escribir una función bash que anule toda la ejecución, sin importar cómo se llame?
- 7. WebRequest.GetResponse tarda mucho tiempo a menos que se anule DefaultWebProxy
- 8. En Python, ¿puedo evitar que una función capture KeyboardInterrupt y SystemExit?
- 9. ¿Cómo evitar que una aplicación se fije en Windows 7?
- 10. ¿Cómo puedo evitar que una clase se herede en C#?
- 11. ¿Cómo evito que el evento checkbox predeterminado anule mi función jQuery check/uncheck?
- 12. Cómo evitar que GCC se alinee
- 13. ¿Cómo encontrar de dónde se importó una función en Python?
- 14. Evitar que las ventanas de Python se centren
- 15. ¿Cómo evitar que varios UIAlertView se acumulen?
- 16. ¿Cómo evito que scaffold.css anule mi CSS personalizado?
- 17. En Python, ¿cómo puedo obtener las variables globales que se utilizan en una función?
- 18. cómo evitar que Sinatra se ejecute?
- 19. ¿Evitar que UITableView se desplace?
- 20. Python - ¿Existe una función que se invoca cuando un objeto no implementa una función?
- 21. ¿Cómo evitar programáticamente que una Mac se quede dormida?
- 22. ¿Cómo evitar que se cargue una aplicación WPF?
- 23. ¿Cómo evitar que los colores se mezclen?
- 24. ¿Cómo puedo evitar que una ventana de diálogo se oculte?
- 25. Cómo evitar que JFrame se cierre
- 26. ¿Cómo puedo evitar que se seleccione texto?
- 27. ¿Se garantiza que la función sorted() de python sea estable?
- 28. ¿Cómo puedo evitar que mi función Ackerman desborde la pila?
- 29. ¿Cómo se prueba que una función de Python arroja una excepción?
- 30. Evitar que ciertas columnas SlickGrid se reordenen
Ni siquiera tiene métodos * privados * en Python, los miembros '__xxx' solo se sombrean. Realmente me sorprendería si hubiera algo como una palabra clave 'final'. – Boldewyn
¿Por qué? ¿Cuál es el caso de uso para prevenir esto? La gente puede leer tu fuente y reescribir la función. ¿Que estás tratando de hacer? –
No sé por qué todos ustedes presumen que lo quiero para evitar que alguien else lo sobrescriba - Quiero que me evite accidentalmente anulándolo en el futuro. Suponiendo que tengo un árbol de herencia relativamente profundo, y una de las clases "más profundas" redefinirá accidentalmente el func (olvidándolo incluso existe) – olamundo