重写继承的方法而不进行名称重整



注意:这里有类似的问题,但考虑到规格,我不认为这是一个完全相同的重复。

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

_Pandas.array()中,我想简单地将一个熊猫数据帧包装在从_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 - 它不仅仅是一个通用的父类 - 我不希望在它的所有方法前面都带有一个下划线。 我还能怎么做呢?

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

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

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

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

最新更新