Python 为什么NewType函数不检查正确的变量类型?

Python 为什么NewType函数不检查正确的变量类型?,python,Python,我正在python代码中练习干净的代码和注释。如果没有检查对象的类型,我不知道定义NewType对象的功能是什么 例如: UserId = NewType('UserId', int) some_id = UserId('Hello World!') type(some_id) >> str 我希望有某种警告或错误指示类型不匹配。。。或者可能: UserId = NewType('UserId', int) some_id = UserId('Hello World!') typ

我正在python代码中练习干净的代码和注释。如果没有检查对象的类型,我不知道定义
NewType
对象的功能是什么

例如:

UserId = NewType('UserId', int)
some_id = UserId('Hello World!')
type(some_id)

>> str
我希望有某种警告或错误指示类型不匹配。。。或者可能:

UserId = NewType('UserId', int)
some_id = UserId('Hello World!')
type(some_id)

>> UserId
但事实并非如此


提前感谢:您使用NewType创建的D

用户ID
仅适用于类型注释。类型注释只用于静态分析(至少到目前为止是这样),所以像pycharm这样的ide和像mypy这样的工具使用它来实现自动完成或错误检查,等等

如果您想要一个“真实”的用户ID类型(运行时的类型),您可以自己创建int的子类

类用户ID(int):
通过
打印(用户ID(3))
#通过这种方式,UserId('helloworld!')将引发ValueError

UserId
您使用NewType创建的仅适用于类型批注。类型注释只用于静态分析(至少到目前为止是这样),所以像pycharm这样的ide和像mypy这样的工具使用它来实现自动完成或错误检查,等等

如果您想要一个“真实”的用户ID类型(运行时的类型),您可以自己创建int的子类

类用户ID(int):
通过
打印(用户ID(3))
#通过这种方式,UserId('helloworld!')将引发ValueError

Python是一种动态类型化语言。在Python中为变量赋值之前,不必声明变量类型。一些IDE使用注释和类型提示来警告类型不匹配。 要实际检查函数中的变量类型,可以使用
isinstance

def NewType(UserId: int)
    if not isinstance(UserId, int):
        raise TypeError("userid must be an integer")
    # your function code here
    return result
可以同时检查多个类型并将其分组为元组:

isinstance(variable, (int, float))

Python是一种动态类型化语言。在Python中为变量赋值之前,不必声明变量类型。一些IDE使用注释和类型提示来警告类型不匹配。 要实际检查函数中的变量类型,可以使用
isinstance

def NewType(UserId: int)
    if not isinstance(UserId, int):
        raise TypeError("userid must be an integer")
    # your function code here
    return result
可以同时检查多个类型并将其分组为元组:

isinstance(variable, (int, float))

这很有道理!我认为它也可以通过
assert
语句来实现。无论如何,非常感谢卡洛斯!这是正确的。唯一的区别是使用assert时的行为:它将退出代码执行并引发AssertionError,而这可能不是您想要的。这很有意义!我认为它也可以通过
assert
语句来实现。无论如何,非常感谢卡洛斯!这是正确的。唯一的区别是使用assert时的行为:它将退出代码执行并引发AssertionError,而这可能不是您想要的。