我试图从 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 类的其他方法的功能,是否需要将 * 参数传递给父类(super class)的 __init__ 函数?如果是这样我该怎么做?现在我得到一个 SyntaxError
如下:
super(LinearSVCSub, self).init(penalty=penalty,loss=loss,*,dual=dual,tol=tol, ^ 语法错误:语法无效
最佳答案
A *
仅出现在方法的定义中,而不出现在对该方法的调用中。 *
表示其后面的所有参数只能按名称提供,不能按位置提供。只要在调用 super
时将其省略,就可以了。
关于python - 使用 * 参数从 sklearn 进行子类化的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64419385/