IDE 无法识别子类中的函数签名与基方法匹配



我有一个基类,其中包含一个在子类中被覆盖的函数。
函数的签名也(部分(更改,其方式(据我所知(符合父类(例如,添加了额外的参数(。
但是,我的 IDE(IntelliJ IDEA(显示一条警告,指出子类中方法的签名与基方法的签名不匹配。

例如:

class BaseFoo():
def func(self, uid: int, *args, **kwargs):
pass
class Foo(BaseFoo):
def func(self, uid: int, name: str, *args, **kwargs):
pass

显示此警告:

方法 '

Foo.func((' 的签名与类 'BaseFoo' 中基方法的签名不匹配

如何编写这些类,使 IDE 能够识别子类中的函数签名确实与父类的函数签名匹配?
也就是说,假设它们在我的示例中匹配(我错了吗?(,不想抑制这种警告(如果我错过了uid参数怎么办?

找不到更好的解决方案,我将发布 Ofer Sadan 的评论作为明确的 答:
在子类的函数定义中添加另一个参数确实会使签名不匹配。人们可以通过使用 *args 和 **kwargs 并从 **kwargs 中获取新参数来绕过它。

例如:

class BaseFoo:
def func(self, uid: int, *args, **kwargs):
pass

class Foo(BaseFoo):
def func(self, uid: int, *args, **kwargs):
name: str = kwargs.get('name')
pass

不会显示警告。
(在错误地未提供nameFoo().func(...)的使用中,它也不会显示警告......
这就是为什么这是该问题的部分解决方案。我很乐意接受完整的解决方案(。

最新更新