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

2024-04-20 09:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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"

在我看来这是一个错误,因为这很好用

^{pr2}$

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


Tags: 实例方法selfnonereturnfooinitdef
1条回答
网友
1楼 · 发布于 2024-04-20 09:40:02

答案很简单,只需先使用__init__方法。例如,这很好:

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

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

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

相关问题 更多 >