问题描述
在运行时,以下代码完全有效:
class Base():
@abstractmethod
def get(self,arg: str,**kwargs: Any):
pass
class Derived(Base):
def get(self,optional_arg: bool = False,**kwargs: Any):
pass
这样做的好处在于,在静态分析期间,如果您碰巧知道您有一个类型为 Derived
的变量,您将获得额外的奖励,即发现可选的命名参数 optional_arg
及其类型。
我认为 Derived
在这里以兼容的方式覆盖 get
,但是,PyRight 说覆盖是不兼容的:
Method "get" overrides class "Base" in an incompatible manner
Parameter 3 type mismatch: base parameter is type "Any",override parameter is type "bool"
PylancereportIncompatibleMethodoverride
尝试使用 overload
装饰器对我来说也失败了,所以我相信我也没有正确使用它:
class Derived(Base):
@overload
def get(self,path: Path,local_path: Path,is_directory: bool = False):
...
def get(self,**kwargs: Any):
pass
给予:
"get" is marked as overload,but additional overloads are missing
PylancereportGeneralTypeIssues
和
Overloaded function implementation is not consistent with signature of overload 1
Type "(self: Derived,**kwargs: Any) -> None" cannot be assigned to type "(self: Derived,optional_arg: bool = False) -> None"
Function accepts too many positional parameters; expected 2 but received 3
PylancereportGeneralTypeIssues
有没有一种正确的方法来输入注释我想要实现的目标?即基类抽象方法对派生类的可选参数的名称和类型一无所知,但派生类可以公开特定的命名参数及其类型。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)