有沒有辦法實體化一個繼承父類所有引數并添加新引數的子類,同時:
- 保持引數順序不變;
- 不需要關鍵字引數;
- 與父類一起改變?
或者這是一件非常規/非Python的事情嗎?
以下最小作業示例應該更清楚地解釋我的問題。
提前致謝!
class Parent:
'''
Sample Parent class.
Arguments
---------
arg1: int
Sample argument 1.
arg2: int
Sample argument 2.
arg3: int
Sample argument 3.
'''
def __init__(self, arg1, arg2, arg3):
self.arg1 = arg1
self.arg2 = arg2
self.arg3 = arg3
class Child(Parent):
'''
Sample Child class.
Arguments
---------
arg1: int
Sample argument 1.
arg2: int
Sample argument 2.
arg3: int
Sample argument 3.
arg4: int
Sample argument 4.
'''
# THIS CHANGES THE ORDER OF THE ARGUMENTS (arg4 is first.)
def __init__(self, arg4, *args):
super().__init__(*args)
self.arg4 = arg4
# THIS MAKES arg4 A KEYWORD-ONLY ARGUMENT.
def __init__(self, *args, arg4):
super().__init__(*args)
self.arg4 = arg4
# THIS REQUIRES MANUAL CHANGES IF THE PARENT CHANGES.
def __init__(self, arg1, arg2, arg3, arg4):
super().__init__(arg1, arg2, arg3)
self.arg4 = arg4
uj5u.com熱心網友回復:
您可以定義父類也使用*args
def __init__(self, *args):
self.arg1 = args[0]
self.arg2 = args[1]
self.arg3 = args[2]
然后是孩子:
def __init__(self, *args):
super().__init__(*args)
self.arg4 = args[-1]
這會將所有 args 傳遞給父級,但它只會使用前 3 個。子級將僅使用 args 中的最后一個元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/454389.html
上一篇:C#泛型繼承,基類轉換
