method - super python
Cómo evitar que una función se anule en Python (4)
El problema es que estás intentando escribir en Python usando filosofías de Java. Algo se traspasa, pero no todos ellos. En Python puedes hacer lo siguiente y está perfectamente bien, pero va completamente en contra de cómo Java piensa en los objetos.
class Thing(object):
x = 1
something = Thing()
something.y = something.x
Si realmente lo quieres, puedes probar el código publicado aquí . Pero como puede ver, hay un montón de código para hacer que haga lo que quiera. 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__
.
¿Hay alguna manera de hacer que una función de clase no se pueda dividir? algo así como la final
palabra clave de java. es decir, cualquier clase que invalida no puede anular ese método.
Sí lo hay, no lo hagas.
Debería añadir a esto después del voto negativo. Algunos ven que tales mecanismos de protección van en contra del espíritu de Python, que "todos somos adultos que consienten aquí". ¿De quién quieres proteger esas funciones? Y si un comentario no es suficiente, ¿por qué algo ''más fuerte''?
Documentaría sus expectativas y espero que otros programadores actúen de manera responsable.
Usar un subrayado doble antes de un método en una clase no es solo una convención de nomenclatura. Al hacerlo, el nombre del método se maneja con classname(_classname__methodname())
.
Al heredar una clase con un método que tiene dos guiones bajos delante, para la clase hija se vuelve difícil anular el método especificado anteriormente. Esta práctica es casi equivalente a la final en java.
Usted podría poner un comentario allí en el sentido de:
# We''ll fire you if you override this method.
Es sorprendente lo bien que funcionan en la práctica las soluciones de baja tecnología como esta.