声明@property函数时的 mypy "too many arguments"



我不明白为什么mypy不喜欢这个@property方法声明:

@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返回'+',这意味着调用了a.f,尽管我们没有提供括号。这是由于@property。这也意味着f的任何附加参数都是多余的,因为它们无法指定。实际上,a.f(x)(带有@property(对应于a.f()(x)(没有属性(,没有留下空间将x作为参数提供给f。事实上,在上面的例子中,错误是

"tr"对象不可调用

作为a.f()首先返回x,它是字符串'+'(a.f部分(,然后由于()而被调用。

那个八哥捡起来真好!

最新更新