【问题标题】:Implementation details实施细节
【发布时间】:2013-09-22 16:48:31
【问题描述】:

我正在研究 pandas 库的源代码,因为我想了解有关实现的更多信息。看了系列课让我思考了一下。如果我隐藏了很多细节,该类的定义如下:

class Series(np.ndarray, generic.PandasObject):
    def __new__(cls, data=None, index=None, dtype=None, name=None, copy=False):
        # some checkings
        subarray = _sanitize_array(data, index, dtype, copy, raise_cast_failure=True)
        return subarray
    def __init__(self, data=None, index=None, dtype=None, name=None, copy=False):
        pass
    # other class methods
def _sanitize_array(data, index, dtype=None, copy=False, raise_cast_failure=False):
    # some more instance checks
    subarr = np.array(arr, dtype=object, copy=copy)
    return subarray

这让我很困惑,因为既没有使用 cls 参数,也没有调用超类。我看不出这段代码是如何工作的。据我了解,Series 类应该只是一个伪装的 ndarray,因为它被返回了。显然我错过了一些东西。

【问题讨论】:

    标签: python class pandas


    【解决方案1】:

    在 0.12 中,Seriesndarray 的子类,有很多被覆盖的方法。你不见了:

    subarr = subarr.view(Series) which makes a ``Series`` a sub-class
    

    无论如何,代码改变了很多,所以在 0.13 中,Series 现在就像其他 pandas 对象和 NDFrame 的子类,而不是 ndarray 的子类。

    here

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多