假设我想接受我可以拨打int()
的任何内容,或者我可以致电str()
的任何内容。如何使用新类型提示进行此操作?
使用typing.SupportsInt
进行注释不起作用,因为mypy会警告不要传递字符串。
答案 0 :(得分:4)
你不能用类型提示。类型提示不能说明字符串的内容,只是它必须是字符串。
请注意,Python中的所有可以转换为字符串(因为__repr__
始终可用);因此,可以将'转换为字符串'可由typing.Any
处理。
对于int()
,您只能再次指定特定的挂钩和类型;您可以指定您接受具有__int__()
方法的对象,但如果您也接受字符串,则无法指定 该字符串中的内容。
所以:
AcceptableToInt = Union[SupportsInt, str, bytes, bytearray]
可以让您检查int()
接受哪些类型,但是如果他们在您实际尝试时会抛出ValueError
异常,则不会。