在Python中处理可变数据类型的正确方法

时间:2014-09-16 19:54:30

标签: python class types enums

我正在尝试编写一个Python类Segment,它由两个Vectors组成,表示与这些点相关的点和函数。

段可以相交,所以我试图编写一个方法s1.intersect(s2),它返回有关Segs s1和s2如何相交的信息。根据段,表示交叉点需要不同数量的点:

  1. 没有交叉点 - > 0分(不需要特定的数据结构)
  2. 单个交叉路口 - > 1分(需要一个Vector
  3. 交叉区域 - > 2分(需要Segment
  4. 换句话说,对于不同的情况,似乎需要2-3种数据类型。这很不方便,因为该功能的用户必须手动区分它们。

    以下是我可以想到的一些返回这些数据类型的方法:

    • 返回包含0,1或2项的Vector列表。

    这样可以获取信息并完成工作,但返回的值并不反映他们实际引用的数据类型 - 即VectorSegment和一些通知失败。

    • 返回不同的数据类型:VectorSegmentFalse

    在这种情况下,用户必须使用isinstance来区分这些或冒无效类型问题。这也很难看。

    • 返回一个包装类Intersection,用于存储VectorSegmentFalse

    这样做的好处是每次都返回相同的数据类型,但用户仍然必须使用isinstance来区分类型。

    在Python中处理多种返回类型的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

继续并返回NoneVectorSegment。这是三种可能性,即使你把它包起来,用户也会在某些时候处理这​​些差异。

所以请保持简单,让您的用户使用isinstance()(完全是Pythonic)。