调用超类的 __call__ 方法

Pet*_*ley 6 python inheritance

http://code.google.com/p/python-hidden-markov/source/browse/trunk/Markov.py

包含一个类HMM,它继承自BayesianModel,是一个新式类。每个都有一个__call__方法。HMM__call__方法旨在调用 BayesianModel 的第 227 行:

return super(HMM,self)(PriorProbs)
Run Code Online (Sandbox Code Playgroud)

但是,这失败了,但有一个例外

super(HMM,self)
Run Code Online (Sandbox Code Playgroud)

不可调用。

我究竟做错了什么?

Mar*_*ers 5

您需要__call__显式调用方法本身:

return super(HMM, self).__call__(PriorProbs)
Run Code Online (Sandbox Code Playgroud)

这适用于任何需要调用超类上的重写方法的钩子。

super()返回一个代理对象,使用一个.__getattribute__()方法在超类层次结构中搜索您正在搜索的属性。这个代理本身是不可调用的;它没有__call__自己的方法。只有当您显式地查找该__call__方法作为该代理的属性时,python 才能为您找到正确的实现。