我无法理解打字模块中的NewType()函数是做什么用的。
在文档中:
使用 NewType() 辅助函数创建不同的类型:
UserId = NewType('UserId', int) some_id = UserId(524313)静态类型检查器会将新类型视为原始类型的子类。这对于帮助捕获逻辑错误很有用:
def get_user_name(user_id: UserId) -> str: ... # typechecks user_a = get_user_name(UserId(42351)) # does not typecheck; an int is not a UserId user_b = get_user_name(-1) ```
在PEP 484中:
在某些情况下,程序员可能希望通过创建简单的类来避免逻辑错误。例如:
class UserId(int): pass get_by_user_id(user_id: UserId): ...
你指的是什么逻辑谬误?创建附加类型UserId并使用它而不是有什么好处int?
例如,您可能错误地传递
get_by_user_id了组 ID 而不是用户 ID。如果没有类型,则不会注意到错误,两者都是int.