Estoy desarrollando en python una clase de archivo que puede leer y escribir un archivo, que contiene una lista de coordenadas xyz. En mi programa, ya tengo una clase Coord3D para mantener las coordenadas xyz.Devolver un objeto vs devolver una tupla
Mi pregunta es relativa al diseño de un método getCoordinate (index). ¿Debo devolver una tupla de flotadores o un objeto Coord3D?
En el primer caso, obtengo un acoplamiento muy bajo, pero probablemente tenga que instanciar un objeto de Coord3D con los valores obtenidos de todos modos, aunque fuera de la clase de archivo. En el segundo caso, tendré la clase de archivo estrechamente acoplada con la clase Coord3D.
Tenga en cuenta que creo que no hay una gran diferencia entre las dos soluciones, pero me gustaría leer su respuesta y la razón detrás de ello.
Editar: para resumir las respuestas que tenemos hasta ahora, parece que no hay elección bien definida. Se ha dicho (apropiadamente) que python no es Java, y no necesita una clase especializada para todo solo porque lo necesita por arquitectura de lenguaje. En mi caso, sin embargo, tengo las siguientes condiciones:
- Estoy trabajando en una biblioteca, donde el objeto de Coord3D se utiliza como está. Usarlo aumentaría la cohesión de mi biblioteca, ya que los tipos de datos se usarán de manera uniforme.
- El objeto Coord3D tiene estado y comportamiento. De hecho, el objeto Coord3D agrega las coordenadas y las unidades en una sola entidad. Las operaciones entre los objetos de Coord3D tendrán en cuenta las unidades potencialmente diferentes y actuarán en consecuencia.
- Puedo poner código de control de centralización en la instanciación de clase Coord3D para rechazar, por ejemplo, matrices de longitud 4 o unidades no. Si utilizo una tupla, no puedo realizar esta comprobación. Además, si un método acepta un Coord3D, se garantiza que está bien formado desde el principio (puede estar en negrita y comprobar si es instancia, o verificar la interfaz). Una tupla puede contener datos no válidos. Aunque el enfoque de pitón a la gestión de errores se realizará, siempre que ocurra el problema, una clase de prevención que yo tenga un coordenadas XYZ hecha de tres cuerdas es de alguna manera beneficiosa (corrígeme si mal, por favor)
Por otro lado, el uso de una tupla tiene las siguientes ventajas:
- Menos ocupación de recursos, bastante crítico en caso de gran
- Más sencillo diseño. Más clases significa un diseño más complejo. Una tupla es un tipo de datos estándar que se entiende bien y se puede desempaquetar fácilmente. Una clase personalizada no es.
- Usando una tupla, la clase XYZFile está totalmente desacoplada del resto de la biblioteca (porque no usa el objeto Coord3D). Esto significa que puede reutilizarse totalmente como una entidad independiente.
otros comentarios muy bienvenidos!
No estoy seguro de que me gusta esto.Parece exponer algunos detalles inútiles. Creo que sería mejor elegir una representación y atenerse a ella. –