python - 为什么 mypy 说我有太多的争论

标签 python mypy

我有一个类,它有一个创建类实例的方法。

class Bar:
    @classmethod
    def create(cls, foo: int):
        return cls(foo)

    def __init__(self, foo: int) -> None:
        pass

当我针对它运行 mypy 时,它显示 mypytest.py:4: error: Too many arguments for "Bar"

对我来说这似乎是一个错误,因为它工作正常

class Bar:
    @classmethod
    def create(cls, foo):
        return cls(foo)

    def __init__(self, foo: int) -> None:
        pass

我不明白为什么定义参数类型的类方法会破坏实例的创建。我错过了什么吗?

最佳答案

答案很简单,把__init__方法放在最前面就行了。例如,这很好用:

class Bar:
    def __init__(self, foo: int) -> None:
        pass

    @classmethod
    def create(cls, foo: int):
        return cls(foo)

由于某些技术原因,如果 __init__(或 __new__)不是类定义中的第一个方法,mypy 目前在某些极端情况下会出现意外行为。我想我已经看到了类似的问题,但在 mypy tracker 上找不到问题。

关于python - 为什么 mypy 说我有太多的争论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493293/

相关文章:

python - 如何表达和强制一个类有两种操作模式,每种模式都有一些有效和无效的方法

java - python RSA模块如何使用java解密

python - 如何仅键入协议(protocol)方法的第一个位置参数并让其他参数不键入?

pytest - 我可以将 mypy 报告与 pytest 覆盖率报告结合起来吗?

python - 如何禁止选择 Tkinter Listbox 小部件的自由部分作为项目?

Python 泛型和子类

python - 如何进行类型注释类型断言?

python - 选择 SFrame 中的特定行

python - 如何使用 sphinx-apidoc 记录 Python 函数参数?

python - 按索引将项目追加到 pandas 列表中