如何解决如果将None作为类型提示替换为typeNone,为什么注释时它们的行为有所不同?
我从docs
找到了
请注意,
None
作为类型提示是一种特殊情况,并由type(None)
代替。
但是,我发现实际情况并非如此(使用Python 3.8.5,iPython 7.16.1)。例如:
- 如果我使用
type(None)
来注释变量:
In [1]: class Foo:
...: a: int
...: b: str
...: c: type(None)
In [2]: Foo.__annotations__
Out[2]: {'a': int,'b': str,'c': NoneType}
In [3]: for k,v in Foo.__annotations.__.items():
...: print(f'Default for {k} -> {v()!r} {v}')
Default for a -> 0 <class 'int'>
Default for b -> '' <class 'str'>
Default for c -> None <class 'NoneType'>
- 而仅使用
None
会产生错误:
In [4]: class Foo:
...: a: int
...: b: str
...: c: None
In [5]: Foo.__annotations__
Out[5]: {'a': int,'c': None}
In [6]: for k,v in Foo.__annotations.__.items():
...: print(f'Default for {k} -> {v()!r} {v}')
Default for a -> 0 <class 'int'>
Default for b -> '' <class 'str'>
Traceback (most recent call last):
File "<ipython-input-40-d9b0ce31b437>",line 2,in <module>
print(f'Default for {k} -> {v()!r} {v}')
TypeError: 'NoneType' object is not callable
那是怎么回事? doc的一行是什么意思?它专门用于短绒棉绒,并且不会影响实际的注释吗?如果是这样,为什么不在提示时强制执行type(None)
或在注释dict中也将None
转换为type(None)
,而不是在几乎相似的上下文中具有两种不同的行为?我想这就是他们在3.10版本中恢复types.NoneType
的原因吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。