我知道 Python 函数中的 Dict 参数最好设置为默认值 None。然而,mypy 似乎不同意:
def example(self, mydict: Dict[int, str] = None):
return mydict.get(1)
这会导致 mypy 错误:
error: Incompatible default for argument "synonyms" (default has type "None", argument has type "Dict[Any, Any]") [assignment]
mypy 另一方面对此没问题:
def example(self, myDict: Dict[int, str] = {}):
但是 pylint 抱怨道:
W0102: Dangerous default value {} as argument (dangerous-default-value)
根据这个SO问题(https://stackoverflow.com/a/26320917),默认值应该是None,但这不适用于mypy。什么选项可以同时满足 pylint 和 mypy 的要求?谢谢。
解决方案(基于评论):
class Example:
"""Example"""
def __init__(self):
self.d: Optional[Dict[int, str]] = None
def example(self, mydict: Optional[Dict[int, str]] = None):
"""example"""
self.d = mydict
我遇到的部分问题(最初未提及)是分配回先前初始化的变量,这是可行的。
我认为类型应该是“
dict
或None
”,所以两者中的Union
:
def example(self, mydict: Union[Dict[int, str], None] = None):
return mydict.get(1)