mypy "too many arguments" 声明@属性 函数时

mypy "too many arguments" when declaring @property function

不明白为什么mypy不喜欢this @property method declaration:

@property
def cc_lemmas_dict(self, tag_delim='+', max_cycles=0) -> Dict[str, Set[str]]:

当我在这个模块上 运行 mypy 时,我得到一个 Too many arguments 错误:

$ mypy src/lexc_parser/
src/lexc_parser/lexicon.py:81: error: Too many arguments
Found 1 error in 1 file (checked 7 source files)

我在网上搜索过,但找不到 mypy 不喜欢这个的任何理由。有什么想法吗?

添加@property 意味着您只需访问它就可以调用该方法(不需要括号)。这是一个完整的例子:

class A:
    @property
    def f(self, x='+'):
        return x
a = A()
print(a.f)
print(a.f('-'))  # error

请注意 a.f returns '+',这意味着 a.f 被调用了,尽管我们没有提供括号。这是由于 @property。这也意味着 f 的任何附加参数都是多余的,因为它们无法指定。实际上,a.f(x)(有 @property)对应于 a.f()(x)(没有 属性),没有空间提供 x 作为 [=16= 的参数].事实上,在上面的例子中,错误是

'str' object is not callable

as a.f() first returns x 这是字符串 '+'a.f 部分),然后由于 ().

mypy 把这个捡起来真好!