我试图从sklearn.svm.LinearSVC
中创建子类,并注意到签名中的*
参数。我不确定这个*
是否指**kwargs或*args或其他什么。我正在尝试将init函数子类化,如下所示。在这个场景中,我将在init函数中添加一个额外的参数new_string_in_subclass
。
从sklearn.svm导入LinearSVC
class LinearSVCSub(LinearSVC):
def __init__(self, penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001, C=1.0, multi_class='ovr',
fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None,
max_iter=1000, sampler: new_string_in_subclass=None):
super(LinearSVCSub, self).__init__(penalty=penalty, loss=loss, *, dual=dual, tol=tol,
C=C, multi_class=multi_class, fit_intercept=fit_intercept,
intercept_scaling=intercept_scaling, class_weight=class_weight,
verbose=verbose, random_state=random_state, max_iter=max_iter)
self.new_string_in_subclass = new_string_in_subclass
如果我想维护LinearSVC
类的其他方法的功能,我是否需要将*参数传递给超类的__init__
函数?如果是这样,我该怎么做?现在我得到一个SyntaxError
如下:
super(LinearSVCSub,self)。init(惩罚=惩罚,损失=损失,*,双=双,tol=tol, ^ SyntaxError:无效语法
*
只出现在方法的定义中,而不出现在对该方法的调用中。*
表示它后面的所有参数只能按名称提供,不能按位置提供。只要在调用super
时不使用它,您就会没事了星号用于分隔仅用于关键字的参数:Bare asterisk in function arguments?在实例化sklearn类时,应该跳过它
相关问题 更多 >
编程相关推荐