Overriding inherited method without name mangling
本问题已经有最佳答案,请猛点这里访问。
注:这里也有类似的问题,但我不认为这是一个完全相同的规格。
下面,我有两个类,一个继承自另一个。请注意,这些只是说明性质。
在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |
我知道我可以做一些像
1 2 3 4 5 6 7 8 9 10 11 | 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()) |
但这似乎非常不理想。实际上,我经常使用
嗯…只想知道为什么在熊猫班你不直接打电话给超级?
1 2 3 4 5 | class _Pandas(_Numpy): def __init__(self, x): super(_Pandas,self).__init__(x) def array(self): return pd.DataFrame(super(_Pandas,self).array()) |
我试过了,结果如下,不知道这是你想要的还是我错过了什么
1 2 3 4 5 | a = [[1, 2], [3, 4]] _Pandas(a).array() 0 1 0 1 2 1 3 4 |