注意:类似的问题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
- 它不仅仅是一个通用的父类 - 而且我不希望用一个下划线为其所有方法添加序言。我怎么能这样做呢?
答案 0 :(得分:2)
嗯...只是想在_Pandas课程中检查为什么你不直接打电话给超级?
a = [[1, 2], [3, 4]]
_Pandas(a).array()
0 1
0 1 2
1 3 4
我试过了,得到了以下结果,不知道这是你想要的还是我错过了什么
{{1}}