使用*参数从sklearn生成子类的正确方法

2024-09-24 04:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从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:无效语法


Tags: 函数inselfnewstringinitclasstol
2条回答

*只出现在方法的定义中,而不出现在对该方法的调用中。*表示它后面的所有参数只能按名称提供,不能按位置提供。只要在调用super时不使用它,您就会没事了

星号用于分隔仅用于关键字的参数:Bare asterisk in function arguments?在实例化sklearn类时,应该跳过它

相关问题 更多 >