我在python中开发了一个文件类,可以读取和写入一个包含xyz坐标列表的文件.在我的程序中,我已经有一个Coord3D类来保存xyz坐标.
我的问题是关于getCoordinate(index)方法的设计.我应该返回一个浮点元组还是一个Coord3D对象?
在第一种情况下,我得到非常低的耦合,但是我可能不得不用获得的值实例化Coord3D对象,尽管在文件类之外.在第二种情况下,我将使文件类与Coord3D类紧密耦合.
请注意,我认为两种解决方案之间没有太大差异,但我想了解您的答案及其背后的原因.
编辑:回顾我到现在为止的答案,看起来没有明确的选择.有人说(适当地)python不是Java,并且你不需要专门的类来处理所有事情,因为你需要语言架构.但是,在我的情况下,我有以下条件:
另一方面,使用元组具有以下优点:
进一步评论非常欢迎!
Joh*_*uhy 13
妥协解决方案:而不是一个类,使Coord3D成为一个namedtuple并返回:-)
用法:
Coord3D = namedtuple('Coord3D', 'x y z')
def getCoordinate(index):
# do stuff, creating variables x, y, z
return Coord3D(x, y, z)
Run Code Online (Sandbox Code Playgroud)
返回值可以完全用作元组,并具有相同的速度和内存属性,因此您不会失去任何通用性.但是,你也可以按名称访问它的值:如果c是的结果getCoordinate(index),那么你就可以工作c.x,c.y等等,以增加可读性.
(显然,如果您的Coord3D类还需要其他功能,这样做有点不太有用)
[如果你不在python2.6上,你可以从食谱中获取命名元素]
我也问过自己同样的问题,尽管是在做二维几何的时候。
我为自己找到的答案是,如果我计划编写一个更大的库,具有更多功能等等,请继续返回 Point,或者在您的情况下返回 Coord3D 对象。如果这只是一个 hacky 实现,那么元组会让你进展得更快。最后,这只是你要用它做什么,以及它是否值得付出努力。