2024-06-28 19:30:37 发布
网友
有什么区别?在
myVar: myCustomClassType
对比
我这样问是因为Pycharm的督察在和后者说话:
Expected type 'myCustomClassType', got 'None' instead
我知道没有对象也是对象,因此本次检查说明存在类型冲突。 我的问题是哪种形式更好?在
只带注释的名称在语法上是合法的,但实际上并不创建变量。在
>>> foo: int >>> foo Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foo' is not defined
myVar的正确类型是Union[myCustomClassType,None]或其等价的{},以允许分配{}。在
myVar
Union[myCustomClassType,None]
如果你定义了一个相关的函数
def foo(bar: int = None): ...
mypy将根据指定的默认值将bar的类型自动“升级”为Optional[int]。不过,在变量注释的情况下,它似乎没有这样做。PyCharm似乎也紧随其后。在
mypy
bar
Optional[int]
第一个是Variable Annotation的一个例子,使用类型提示让类型检查者知道如何将标识符(在特定范围内)与某个类型相关联。在
两者的区别在于
不将任何值赋给myVar,而第二个值则为。如果希望myVar具有None值或myCustomClassType值,则应使用typing模块中的^{}泛型类型:
None
myCustomClassType
typing
如果您的变量应该只保存myCustomClassType值,那么您应该使用第一个变量,并确保在使用它之前分配一个值。在
你必须这么做
myVar = None
没有类型注释。您可以稍后分配一个myCustomerClassType实例。在
myCustomerClassType
只带注释的名称在语法上是合法的,但实际上并不创建变量。在
},以允许分配{}。在
^{pr2}$myVar
的正确类型是Union[myCustomClassType,None]
或其等价的{如果你定义了一个相关的函数
mypy
将根据指定的默认值将bar
的类型自动“升级”为Optional[int]
。不过,在变量注释的情况下,它似乎没有这样做。PyCharm似乎也紧随其后。在第一个是Variable Annotation的一个例子,使用类型提示让类型检查者知道如何将标识符(在特定范围内)与某个类型相关联。在
两者的区别在于
不将任何值赋给} 泛型类型:
^{pr2}$myVar
,而第二个值则为。如果希望myVar
具有None
值或myCustomClassType
值,则应使用typing
模块中的^{如果您的变量应该只保存
myCustomClassType
值,那么您应该使用第一个变量,并确保在使用它之前分配一个值。在你必须这么做
没有类型注释。您可以稍后分配一个
myCustomerClassType
实例。在相关问题 更多 >
编程相关推荐