覆盖没有名称重整的继承方法

时间:2017-10-31 18:46:59

标签: python python-3.x inheritance override

注意:类似的问题here,但根据规格,我不相信它是完全重复的。

下面,我有两个类,一个继承自另一个。请注意,这些仅仅是说明性的。

_Pandas.array()中,我想简单地将pandas DataFrame包装在从_Numpy.array()返回的NumPy数组周围。我知道我当前的代码有什么问题(_Pandas.array()被重新定义,尝试调用自身,并经历无限递归),但不知道如何在没有名称修改或准私有方法的情况下修复它父母班。

import numpy as np
import pandas as pd

class _Numpy(object):
    def __init__(self, x):
        self.x = x
    def array(self):
        return np.array(self.x)

class _Pandas(_Numpy):
    def __init__(self, x):
        super(_Pandas, self).__init__(x)
    def array(self):
        return pd.DataFrame(self.array())

a = [[1, 2], [3, 4]]
_Pandas(a).array()    # Intended result - pd.DataFrame(np.array(a))
                      # Infinite recursion as method shuffles back & forth

我知道我可以做类似

的事情
class _Numpy(object):
    def __init__(self, x):
        self.x = x
    def _array(self):            # Changed to leading underscore
        return np.array(self.x)

class _Pandas(_Numpy):
    def __init__(self, x):
        super().__init__(x)    
    def array(self):
        return pd.DataFrame(self._array())

但这似乎非常不理想。实际上,我经常使用_Numpy - 它不仅仅是一个通用的父类 - 而且我不希望用一个下划线为其所有方法添加序言。我怎么能这样做呢?

1 个答案:

答案 0 :(得分:2)

嗯...只是想在_Pandas课程中检查为什么你不直接打电话给超级?

a = [[1, 2], [3, 4]]
_Pandas(a).array()
  0  1
0  1  2
1  3  4

我试过了,得到了以下结果,不知道这是你想要的还是我错过了什么

{{1}}