实施细节

时间:2013-09-22 16:48:32

标签: python class pandas

我正在查看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,因为那是被返回的。显然我错过了什么。

1 个答案:

答案 0 :(得分:3)

在0.12中,Seriesndarray的子类,有许多覆盖方法。你错过了:

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

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

请参阅here