如何解决在派生类的重写方法中键入一个可选的命名参数
在运行时,以下代码完全有效:
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 举报,一经查实,本站将立刻删除。