【发布时间】:2010-10-22 02:28:01
【问题描述】:
我正在用 python 开发一个可以读写文件的文件类,其中包含 xyz 坐标列表。在我的程序中,我已经有一个 Coord3D 类来保存 xyz 坐标。
我的问题与 getCoordinate(index) 方法的设计有关。我应该返回一个浮点元组还是一个 Coord3D 对象?
在第一种情况下,我得到非常低的耦合,但是我可能不得不用获得的值实例化一个 Coord3D 对象,尽管在文件类之外。在第二种情况下,我将文件类与 Coord3D 类紧密耦合。
请注意,我认为这两种解决方案没有太大区别,但我想阅读您的答案及其背后的原因。
编辑:回顾一下我到目前为止得到的答案,看起来没有明确的选择。有人说(恰当地)python不是Java,你不需要一个专门的类来处理所有的事情,因为你需要它的语言架构。然而,就我而言,我有以下条件:
- 我正在开发一个库,其中 Coord3D 对象按原样使用。使用它会增加我的库的凝聚力,因为数据类型将被统一使用。
- Coord3D 对象具有状态和行为。实际上,Coord3D 对象将坐标和单位聚合在一个实体中。 Coord3D 对象之间的操作将考虑到潜在的不同单元,并采取相应的行动。
- 我可以将集中控制代码放入 Coord3D 类实例化中以拒绝,例如长度为 4 的数组或非单位的数组。如果我使用元组,则无法执行此检查。此外,如果一个方法接受 Coord3D,则可以保证它预先形成良好的格式(您可以大胆并检查 isinstance,或检查接口)。元组可以包含无效数据。尽管在出现问题的地方使用 python 方法进行错误处理,但阻止我使用由三个字符串组成的 xyz 坐标的类在某种程度上是有益的(如果有错误,请纠正我)
另一方面,使用元组有以下优点:
- 对资源的占用少,在巨大的情况下相当关键
- 更简单的设计。更多的类意味着更复杂的设计。元组是一种标准数据类型,易于理解并且可以轻松解包。个性化课程不是。
- 使用元组,XYZFile 类与库的其余部分完全分离(因为它不使用 Coord3D 对象)。这意味着它可以作为一个独立的实体完全重复使用。
欢迎更多的cmets!
【问题讨论】:
标签: python