¿Qué tan malo es redefinir un método de clase de otro módulo de terceros en Python?¿Qué tan malo es anular un método de un módulo de terceros?
De hecho, los usuarios pueden crear matrices que contienen NumPy numbers with uncertainty; idealmente, me gustaría que su código se ejecute sin modificaciones (en comparación con cuando el código manipula matrices flotantes); en particular, sería grande si la inversa de la matriz m
todavía podría ser obtenido con m.I
, a pesar del hecho de que m.I
tienen que ser calculados con mi propio código (el método original I
no funciona, en general).
¿Es muy grave para redefinir numpy.matrix.I? Por un lado, altera el código de terceros, lo que no me gusta, ya que puede no ser robusto (¿y si otros módulos hacen lo mismo? ...). Otro problema es que el nuevo numpy.matrix.I es un contenedor que implica una pequeña sobrecarga cuando se puede aplicar la matriz original numpy.matrix para obtener la matriz inversa.
Está subclassing matrices NumPy y sólo cambiar su método I
mejor? esto obligaría a los usuarios a actualizar su código y crear matrices de números con incertidumbre con m = matrix_with_uncert(…)
(en lugar de seguir usando numpy.matrix(…)
, como para una matriz de carrozas), pero tal vez esto sea un inconveniente que debería aceptarse en aras de la solidez. Las inversiones de matrices aún se pueden realizar con m.I
, lo cual es bueno ... Por otro lado, sería bueno si los usuarios pudieran construir todas sus matrices (de flotantes o de números con incertidumbres) directamente con numpy.matrix()
, sin tener que molestarse en verificar los tipos de datos. .
¡Algún comentario o enfoque adicional sería bienvenido!
Gracias por esta descripción lúcida del mono de parches y de sus problemas potenciales! Debo decir que NumPy fomenta la definición de "matrices de algo" apoyándolas ('numpy.array ([any_object])'). Por lo tanto, diría que "matrices de cualquier tipo de objeto" es un concepto muy respaldado por NumPy-element-wise Además, se admite automáticamente. Dicho esto, ¡me suscribo completamente al resto de su respuesta! – EOL