繁体   English   中英

将所需的位置参数传递给超类,而无需将其添加到子类的构造函数中

[英]Pass required positional argument to super class without adding it in subclass' constructor

我有这样的课:

class C1:

    def __init__(self, arg1, kwarg1=1, kwarg2=2):
        ...

现在,我想创建一个C2 ,只更改C1kwarg1kwarg2默认值。 这是某种functools.partial但用于类。

我可以这样做:

class C2(C1):

    def __init__(self, arg1, kwarg1=3, kwarg2=4):
        super().__init(arg1, kwarg1=kwarg1, kwarg2=kwarg2)

但是我不喜欢这样,我需要将arg1传递给C2构造函数,然后使用super().__init(arg1, ...)将它原样传递给C1

我想做这样的事情:

class C2(C1):

    def __init__(self, kwarg1=3, kwarg2=4, *args, **kwargs):
        super().__init(kwarg1=kwarg1, kwarg2=kwarg2, *args, **kwargs)

但这不起作用:

TypeError: __init__() missing 1 required positional argument: 'arg1'

有什么办法可以将arg1C2传递到C1 ,而无需在C2的构造函数中提及

您可以以更复杂的方式进行操作,但是至少您不会传递可怕的arg1

class C2(C1):

    def __init__(self, *args, **kwargs):
        kwargs["kwarg1"] = kwargs.get("kwarg1", 3)
        kwargs["kwarg2"] = kwargs.get("kwarg2", 4)
        super().__init__(*args, **kwargs)

但是在初始化C2时,仍然需要保留位置参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM