【发布时间】:2014-11-10 16:59:51
【问题描述】:
我正在尝试编写一个 Python 类 Segment,它由两个 Vectors 组成,代表它的点和与这些点相关的函数。
Segments 可以相交,所以我正在尝试编写一个方法s1.intersect(s2),它返回有关 Segments s1 和 s2 如何相交的信息。根据段的不同,表示交叉点需要不同数量的点:
- 没有交点 -> 0 点(不需要特定的数据结构)
- 单个交叉点 -> 1 个点(需要单个
Vector) - 相交区域 -> 2 个点(需要
Segment)
换句话说,不同的情况似乎需要 2-3 种数据类型。这很不方便,因为函数的用户必须手动区分它们。
以下是我能想到的返回这些数据类型的一些方法:
- 返回包含 0、1 或 2 项的
Vector列表。
这将获取信息并完成工作,但返回的值并不反映它们实际引用的数据类型——即Vector、Segment,以及一些失败通知。
- 返回不同的数据类型:
Vector、Segment或False
在这种情况下,用户必须使用isinstance 来区分它们,否则可能会出现无效类型问题。这也很丑。
- 返回一个包装类
Intersection,它存储Vector、Segment或False。
这样做的好处是每次都返回相同的数据类型,但用户仍然必须使用isinstance 来区分类型。
在 Python 中处理多种返回类型的最佳方法是什么?
【问题讨论】:
-
我不确定你的问题是什么......你不必在 Python 中返回特定类型,所以你的
intersect()方法可以根据什么返回这些中的任何一个它决定了。在结果处理代码中,您可以使用isinstance、hasattr或等效的东西来确定您收到了什么。 -
Intersection类如何适应这个? -
哇...我忘了
isinstance。基本问题,对不起:/ -
isinstance很少需要,也不太可能是您问题的最 Pythonic 答案。 -
为什么 2 不能是带有单个
Vector的Segment,而 1 不能是空的Segment。这样你根本不需要检查类型。