Rug*_*rra 2 python inheritance callable
我有以下代码
import numpy as np
class Estimator(object):
name = None
def __init__(self):
self.__call__ = self._call
class Mean(Estimator):
name = 'mean'
def _call(self, data):
return np.mean(data)
data = np.arange(10)
Run Code Online (Sandbox Code Playgroud)
现在,为什么我不能将第二类作为第一类的仿函数?
它似乎工作:
M = Mean()
print M.__call__(data) # -> 4.5
Run Code Online (Sandbox Code Playgroud)
M有这样的方法__call__:
print '__call__' in dir(M) # -> True
Run Code Online (Sandbox Code Playgroud)
但它不起作用
print M(data)
Run Code Online (Sandbox Code Playgroud)
我明白了:
TypeError: 'Mean' object is not callable
Run Code Online (Sandbox Code Playgroud)
正如阿什维尼所说,"特殊方法是在课堂上查找而非实例".
所以以下内容可以按预期工作(虽然我无法想象你为什么要这样做):
class Estimator(object):
name = None
def __init__(self):
self.__class__.__call__ = self.__class__._call
class Mean(Estimator):
name = 'mean'
def _call(self, data):
return np.mean(data)
Run Code Online (Sandbox Code Playgroud)