簡體   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