Python初始化var为None?

2024-06-28 19:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

有什么区别?在

myVar: myCustomClassType 

对比

^{pr2}$

我这样问是因为Pycharm的督察在和后者说话:

Expected type 'myCustomClassType', got 'None' instead

我知道没有对象也是对象,因此本次检查说明存在类型冲突。 我的问题是哪种形式更好?在


Tags: 对象none类型type形式pycharmexpectedgot
3条回答

只带注释的名称在语法上是合法的,但实际上并不创建变量。在

>>> foo: int
>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined

myVar的正确类型是Union[myCustomClassType,None]或其等价的{},以允许分配{}。在

^{pr2}$

如果你定义了一个相关的函数

def foo(bar: int = None):
    ...

mypy将根据指定的默认值将bar的类型自动“升级”为Optional[int]。不过,在变量注释的情况下,它似乎没有这样做。PyCharm似乎也紧随其后。在

第一个是Variable Annotation的一个例子,使用类型提示让类型检查者知道如何将标识符(在特定范围内)与某个类型相关联。在

两者的区别在于

myVar: myCustomClassType 

不将任何值赋给myVar,而第二个值则为。如果希望myVar具有None值或myCustomClassType值,则应使用typing模块中的^{}泛型类型:

^{pr2}$

如果您的变量应该只保存myCustomClassType值,那么您应该使用第一个变量,并确保在使用它之前分配一个值。在

你必须这么做

myVar = None

没有类型注释。您可以稍后分配一个myCustomerClassType实例。在

相关问题 更多 >