mypy 给出“参数默认值不兼容”

问题描述 投票:0回答:1

我知道 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

我遇到的部分问题(最初未提及)是分配回先前初始化的变量,这是可行的。

python python-typing mypy pylint
1个回答
10
投票

我认为类型应该是“

dict
None
”,所以两者中的
Union

def example(self, mydict: Union[Dict[int, str], None] = None):
        return mydict.get(1)
© www.soinside.com 2019 - 2024. All rights reserved.