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

Python IDE无法识别子类中的函数签名与基方法匹配,python,inheritance,intellij-idea,Python,Inheritance,Intellij Idea,我有一个基类,其函数在子类中被重写函数的签名也(部分)更改,以(据我所知)符合父类的方式(例如,添加了附加参数) 但是,我的IDE(IntelliJ IDEA)显示了一个警告,即子类中方法的签名与基方法的签名不匹配 例如: class BaseFoo(): def func(self, uid: int, *args, **kwargs): pass class Foo(BaseFoo): def func(self, uid: int, name: str,

我有一个基类,其函数在子类中被重写
函数的签名也(部分)更改,以(据我所知)符合父类的方式(例如,添加了附加参数)
但是,我的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
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
显示此警告:

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

如何编写这些类,使IDE能够识别子类中的函数签名确实与父类中的函数签名匹配?

也就是说,假设它们在我的示例中匹配(我错了吗?),我不想抑制这种警告(如果我错过了
uid
arg?)。

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

例如:

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

class Foo(BaseFoo):
    def func(self, uid: int, name: str, *args, **kwargs):
        pass
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
不会显示警告。

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

如果签名不同,则不会覆盖,这是重载。由于添加了
name
参数,签名确实有所不同。如果希望签名保持不变,请使用
name
作为
kwargs['name']
重载中包含的密钥工作参数?但它是在一个子类中,而不是在同一个子类中class@OferSadan没有找到另一个解决方案,我把你的评论作为一个答案