Paw*_*wel 9 python type-hinting python-3.x mypy python-typing
在尝试更新我的代码以符合 PEP-484(我使用的是mypy0.610)时,我遇到了以下报告:
$ mypy mymodule --strict-optional --ignore-missing-imports --disallow-untyped-calls --python-version 3.6
myfile.py:154: error: Signature of "deliver" incompatible with supertype "MyClass"
我的课:
from abc import abstractmethod
from typing import Any
class MyClass(object):
@abstractmethod
def deliver(self, *args: Any, **kwargs: Any) -> bool:
raise NotImplementedError
Run Code Online (Sandbox Code Playgroud)
我的文件.py:
class MyImplementation(MyClass):
[...]
def deliver(self, source_path: str,
dest_branches: list,
commit_msg: str = None,
exclude_files: list = None) -> bool:
[...]
return True
Run Code Online (Sandbox Code Playgroud)
我肯定在这里做错了什么,但我不太明白是什么:)
任何指针将不胜感激。
use*_*ica 10
@abstractmethod
def deliver(self, *args: Any, **kwargs: Any) -> bool:
raise NotImplementedError
Run Code Online (Sandbox Code Playgroud)
这个声明并不意味着子类可以给出deliver他们想要的任何签名。子类deliver方法必须准备好接受超类deliver方法将接受的任何参数,因此您的子类deliver必须准备好接受任意位置或关键字参数:
# omitting annotations
def deliver(self, *args, **kwargs):
...
Run Code Online (Sandbox Code Playgroud)
你的子类deliver没有那个签名。
如果所有子类都应该具有deliver您为 编写的相同签名MyImplementation,那么您也应该提供MyClass.deliver相同的签名。如果您的子类将具有不同的deliver签名,则该方法可能不应该真正位于超类中,或者您可能需要重新考虑您的类层次结构,或者给它们相同的签名。
| 归档时间: |
|
| 查看次数: |
3985 次 |
| 最近记录: |