我不明白为什么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
部分(,然后由于()
而被调用。
那个八哥捡起来真好!