python - 使用 python 静态类型/mpy,我可以说 "this method has the same/similar type signature as method X"吗?

标签 python mypy

我正在尝试重写初始化方法但不从基本方法复制所有静态类型:

class BaseClass:
    def __init__(self, *, message: str, error_code: int):
        self.message = message
        self.error_code = error_code

class SubClass(BaseClass):
    def __init__(self, *, details: str, **kwargs):
        super().__init__(**kwargs)
        self.details = details

我真的很想不必将 BaseClass.__init__ 的签名复制到 SubClass.__init__ 中,以便对参数进行静态检查。是否可以向静态类型/mypy 指示 SubClass.__init__(**kwargs) 是在 BaseClass.__init__ 中声明的参数/类型?

在通读了 python typing 之后,我找不到允许这样做的语法或“委托(delegate)输入”模型。文档以及 mypy cheat-sheet

理想情况下,我希望使用如下代码来引发 mypy 错误/警告:

SubClass(message="foo", error_code=13, details="badness", stack_trace=[1, 2, 3])

子类不接受名称为“stack_trace”的参数。

最佳答案

简答:no, there is an open feature request .

在您的特定情况下,您可以使用数据类来告诉 mypy 有关 kwargs 的信息:

MYPY = False

if MYPY:
    from dataclasses import dataclass

    @dataclass
    class BaseClass:
        message: str
        error_code: int

    @dataclass
    class SubClass(BaseClass):
        details: str
else:
    class BaseClass:
        def __init__(self, *, message: str, error_code: int):
            self.message = message
            self.error_code = error_code

    class SubClass(BaseClass):
        def __init__(self, *, details: str, **kwargs):
            super().__init__(**kwargs)
            self.details = details

上面的代码使用最新的 mypy 进行类型检查并检测您的类的错误使用,并且仍然在没有数据类的 Python 版本上运行。您可以将数据类定义放入 .pyi 文件中以启用对 Python 2 的支持。

如果您可以放弃较旧的 Python 版本,您还可以摆脱 __init__ 代码并一直使用数据类。

关于python - 使用 python 静态类型/mpy,我可以说 "this method has the same/similar type signature as method X"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56795539/

相关文章:

python - os.open/read/write/close 的可接受使用?

python - 开发方法导出ipa报错

python - 在句点 (`self` 关键字之后 Python 的烦人的 sublime 文本自动完成)

python - 检查分配给初始设置为 None 的保护值的属性注释

python - AWS lambda 函数的 mypy 类型 stub

python - python 泛型函数的最佳实践

python - 从python中的float中减去 bool 值

python - 我如何在 Python 中使用 LXML 捕获 XML 文件的所有元素名称?

python-3.x - 如何根据运行时条件指定类型

python - Mypy "class module"注解