如何正确继承从 parent 到 child class 的参数?
How to correctly inherit arguments from parent to child class?
有没有办法实例化 child class 继承 parent class 的所有参数并添加新参数 while:
- 保持参数顺序不变;
- 不需要关键字参数;
- 与 parent 的变化 class?
或者这是 unconventional/unpythonic 要做的事吗?
下面的minimal-working例子应该能更清楚地解释我的问题。
提前致谢!
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
您可以定义 parent class 以同时使用 *args
def __init__(self, *args):
self.arg1 = args[0]
self.arg2 = args[1]
self.arg3 = args[2]
然后 child:
def __init__(self, *args):
super().__init__(*args)
self.arg4 = args[-1]
这会将所有参数传递给 parent 但它只会使用前 3 个。child 只会使用 args
中的最后一个元素
有没有办法实例化 child class 继承 parent class 的所有参数并添加新参数 while:
- 保持参数顺序不变;
- 不需要关键字参数;
- 与 parent 的变化 class?
或者这是 unconventional/unpythonic 要做的事吗?
下面的minimal-working例子应该能更清楚地解释我的问题。
提前致谢!
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
您可以定义 parent class 以同时使用 *args
def __init__(self, *args):
self.arg1 = args[0]
self.arg2 = args[1]
self.arg3 = args[2]
然后 child:
def __init__(self, *args):
super().__init__(*args)
self.arg4 = args[-1]
这会将所有参数传递给 parent 但它只会使用前 3 个。child 只会使用 args
中的最后一个元素