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)
不可调用。
我究竟做错了什么?
您需要__call__显式调用方法本身:
return super(HMM, self).__call__(PriorProbs)
Run Code Online (Sandbox Code Playgroud)
这适用于任何需要调用超类上的重写方法的钩子。
super()返回一个代理对象,使用一个.__getattribute__()方法在超类层次结构中搜索您正在搜索的属性。这个代理本身是不可调用的;它没有__call__自己的方法。只有当您显式地查找该__call__方法作为该代理的属性时,python 才能为您找到正确的实现。