У меня есть следующее:
class Parent:
def method(self, arg1: str, *args: Any, **kwargs: Any) -> None:
print("Hello", arg1)
class Child(Parent):
def method(self, arg1: str, arg2: int, *args: Any, **kwargs: Any) -> None:
print("Hello", arg1, str(arg2))
Цель этого проекта - заставить все подклассы Parent
иметь аргумент arg1
, но иметь возможность добавить любой аргумент после этого. Эти следующие аргументы представлены как *args
и **kwargs
в Parent
, а Child
"требует" arg2
.
Я знаю, что это плохо, так как Child.method
должен быть в состоянии использоваться везде, где ожидается Parent.method
, но дополнительный аргумент запрещает это. Тем не менее, есть ли более милое решение, чем замена *args
и **kwargs
каким-либо параметром options: Dict[str, Any]
в Parent
и Children
?
Я слышал о принципе подстановки Лискова, но не знаю, как применить это в этом случае.