我正在查看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,因为那是被返回的。显然我错过了什么。
答案 0 :(得分:3)
在0.12中,Series
是ndarray
的子类,有许多覆盖方法。你错过了:
subarr = subarr.view(Series) which makes a ``Series`` a sub-class
无论如何,代码改变了很多,所以在0.13中,Series
现在就像其他pandas对象和NDFrame
的子类一样,而不是ndarray
的子类。 1}}。
请参阅here