[英]Pass required positional argument to super class without adding it in subclass' constructor
我有这样的课:
class C1:
def __init__(self, arg1, kwarg1=1, kwarg2=2):
...
现在,我想创建一个C2
,只更改C1
中kwarg1
和kwarg2
默认值。 这是某种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'
有什么办法可以将arg1
从C2
传递到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.