引数のアノテーションで、UnionとOptionalを併用する方法


以下のソースコードにおいて、

[code]

    def func( key:Union[int,list] = None):
        ...
    
[/code]

keyという引数は、Optionalでありながら、Unionでint、listにもなりうるものです。

Linter(Mypy)でエラーとして検出されてしまいます。

どのような記述方法が正解なのでしょうか？




手元の環境(mypy 1.3.0)で、`None`を許容するように書き換える方法でも警告がなくなりました。

[code]

    def func(key:Union[int,list] = None): # 修正前
    def func(key:Union[int,list,None] = None): # 修正後
    
[/code]

**修正前のmypy実行結果**

[code]

    hoge.py:3: error: Incompatible default for argument "key" (default has type "None", argument has type "Union[int, List[Any]]")  [assignment]
    hoge.py:3: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
    hoge.py:3: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
    Found 1 error in 1 file (checked 1 source file)
    
[/code]

**修正後のmypy実行結果**

[code]

    Success: no issues found in 1 source file
    
[/code]




手元の環境(mypy 1.3.0)で、`None`を許容するように書き換える方法でも警告がなくなりました。

[code]

    def func(key:Union[int,list] = None): # 修正前
    def func(key:Union[int,list,None] = None): # 修正後
    
[/code]

**修正前のmypy実行結果**

[code]

    hoge.py:3: error: Incompatible default for argument "key" (default has type "None", argument has type "Union[int, List[Any]]")  [assignment]
    hoge.py:3: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
    hoge.py:3: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
    Found 1 error in 1 file (checked 1 source file)
    
[/code]

**修正後のmypy実行結果**

[code]

    Success: no issues found in 1 source file
    
[/code]

