[英]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.