TypeError:__init __()缺少1个必需的位置参数:分支,但提供了参数

时间:2019-05-21 21:26:18

标签: python python-3.x inheritance

我有另一个类的子类。两者对于__init__方法具有相同的签名。我的呼叫者提供了所有必需的参数。但是我仍然遇到缺少的参数错误。

我尝试了不同的方法来调用超类的__init__方法。

基类初始化函数(从另一个文件导入):

class Gerrit:
    connections = {
        'consumer': MyGerritClient(host='gerrit.consumer.com', username=getpass.getuser()),
        'b2b': MyGerritClient(host='gerrit.b2b.com', username=getpass.getuser())
    }

    def __init__(self, segment, rev_id, branches):
        print("TRACE: Gerrit::__init__()")
        self.branches = branches
        self.review = None  # Type: GerritChange
        self.gerrit_client = self.connections[segment]
        for review_candidate in self.gerrit_client.query(rev_id):
            if self.branch_is_valid(review_candidate.branch) and review_candidate.status != 'ABANDONED':
                self.review = review_candidate
        self.approved = False
        self.rev_id = rev_id
        self.merged = False

子类__init__方法:

class CvGerrit(Gerrit):
    def __init__(self, segment, rev_id, branches):
        Gerrit.__init__(segment, rev_id, branches)

呼叫者:

review = CvGerrit(segment='consumer', rev_id=gerrit_id, branches=my_branches)

我希望可以构造子类CvGerrit。相反,我得到缺少的位置参数错误。在调用方传递list时,基类的其他用法是否将dict用作branchs参数是否重要?这是有意的,也是产生子类的全部原因,因此我可以使用子级中的重写函数对集合进行不同的处理。

1 个答案:

答案 0 :(得分:1)

您将要致电

Gerrit.__init__(self, segment, rev_id, branches)

super().__init__(segment, rev_id, branches)

__init__本身就是另一个函数对象,因此,通过类访问它时,必须传递 all 参数,包括self。通过实例或super访问它时,您将获得一个绑定方法,其中self已经预先插入到参数列表中。