在重写方法最佳实践(即避免pylint错误)上减少强制参数(更改方法签名)



我有一个通用的父类mymethod和特定的子类,其中mymethod所需的一些参数是已知的-孩子的用户甚至不需要知道他们。我想覆盖我的方法,所以它只需要param1,然而pylint抱怨继承的方法改变了签名- W0221:参数的数量是***在***,现在是***在覆盖***方法(参数不同)

这个用例的最佳实践是什么?我试过添加**kwargs到任何一个或两个方法,但没有帮助(即使它会我然后不得不解决"未使用的参数"的问题?)我可以创建ChildA。Mymethod2只接受param1,并在其中调用super()。Mymethod (param1, param2, param3)填充剩余的参数,但这似乎相当尴尬-有更好的方法来实现这一点吗?

class Parent():
def mymethod(self, param1, param2, param3):  
log.info(f'func a with {param1} and {param2} and {param3}')
class ChildA(Parent):
def mymethod(self, param1, **kwargs):  # kwargs added hoping to 'fool' pylint about signature arguments, no help
param2 = 2
param3 = 3
super().func(param1, param2, param3)

期望的状态是有父类和许多子类(每个定义自己的param2和param3)传递pylint,而用户只能做

c = ChildA()
c.mymethod(param1)

您可以尝试在子类中使用默认参数:

class Parent():
def mymethod(self, param1, param2, param3):  
log.info(f'func a with {param1} and {param2} and {param3}')
class ChildA(Parent):
def mymethod(self, param1, param2=None, param3=None):
param2 = 2
param3 = 3
super().func(param1, param2, param3)

最新更新