不能在Python中子类化mlpy.LibSvm

时间:2013-01-25 09:57:03

标签: python libsvm

我想继承从mlpy机器学习包导出的LibSvm对象类:

from mlpy import MaximumLikelihoodC, LibSvm 

class Svm(LibSvm):   

def __init__(self,Gs,ls):
    self._K = ls.shape[1]
    self._Gs = Gs
    self._N = Gs.shape[1]
    self._ls = ls
    LibSvm.__init__('c_svc','rbf',\
            gamma=1.0/self._N,C=100,probability=True)

当我调用构造函数时,例如,

svm = Svm(Gs,ls)

解释程序忽略我的 init 并执行LibSvm的 init 方法,给出错误

svm = SVM(Gs,ls)  
File "libsvm.pyx", line 146, in mlpy.libsvm.LibSvm.__cinit__ mlpy/libsvm/libsvm.c:1803)
ValueError: invalid svm_type

使用相同的语法对MaximumLikelihoodC进行子类化没有问题。

1 个答案:

答案 0 :(得分:1)

在C中实现的Python类不能被子类化,除非它们是专门为它设计的,请参阅Which classes cannot be subclassed?

通过错误消息的外观,似乎很确定它是用C实现的,我希望作者没有投入额外的工作来使它成为可子类化的。