“可以转换为”的类型提示是什么意思?

e-s*_*tis 9 python type-hinting

假设我想接受任何我可以召唤的东西int(),或者任何我可以召唤的东西str()。我该如何使用新的类型提示来做到这一点?

注释 withtyping.SupportsInt不起作用,因为 mypy 会警告不要传递字符串。

Mar*_*ers 7

你不能,不能使用类型提示。类型提示不能说明字符串的内容,只能说明它必须字符串。

请注意, Python 中的所有内容都可以转换为字符串(__repr__始终可用);因此对于“可以转换为字符串”可以由 处理typing.Any

对于int(),只能再次指定特定的钩子和类型;您可以指定您将接受具有__int__() 方法的对象,但如果您还接受字符串,则无法指定该字符串的内容。

所以:

AcceptableToInt = Union[SupportsInt, str, bytes, bytearray]
Run Code Online (Sandbox Code Playgroud)

会让你检查什么类型接受,但不会在你实际尝试时int()检查它们是否会抛出异常。ValueError