在Python中使用object作为类型有什么问题?

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

下面的程序可以工作,但给出了一个MyPy错误。

from typing import Type, TypeVar, Any, Optional


T = TypeVar('T')


def check(element: Any, types: Type[T] = object) -> Optional[T]:
    if not isinstance(element, types):
        return None
    return element


print(check(123, int))
print(check(123, object))

MyPy 抱怨。

main.py:7: error: Incompatible default for argument "types" (default has type "Type[object]", argument has type "Type[T]")
Found 1 error in 1 file (checked 1 source file)

我做错了什么?

替换 objectType[object] 神秘的工作。

python mypy python-typing
1个回答
0
投票

你使用的是 变量型 错位,应与 elementtypes.

from typing import Optional, Type, TypeVar

T = TypeVar('T')

def check(element: T, types: Type = object) -> Optional[T]:
    if not isinstance(element, types):
        return None
    return element

0
投票

问题是,默认值必须适合所有可能的替换。T. 由于它不正确的解决方法是定义重载,一个用 Type[T] 生产 Optional[T] 和一个有 Literal[object] 和生产 Any. 然后在组合声明中,可以提供默认值。

Guido解决了这个问题 此处.

© www.soinside.com 2019 - 2024. All rights reserved.