Python类型提示中的‘MaybeNone’(又称‘Any技巧’)工作原理及实际作用问询
Python类型提示中的‘MaybeNone’(又称‘Any技巧’)工作原理及实际作用问询
我在Python标准库的类型存根里发现了一个特别的类型MaybeNone,它通常是以NormalType | MaybeNone的形式出现的。比如在sqlite3的Cursor类里,就有这样的代码:
class Cursor: # May be None, but using `| MaybeNone` (`| Any`) instead to avoid slightly annoying false positives. @property def description(self) -> tuple[tuple[str, None, None, None, None, None, None], ...] | MaybeNone: ...
这个MaybeNone的定义是这样的:
# Marker for return types that include None, but where forcing the user to # check for None can be detrimental. Sometimes called "the Any trick". See # CONTRIBUTING.md for more information. MaybeNone: TypeAlias = Any # stable
(我没在对应的CONTRIBUTING.md里找到更多相关信息)
我理解它的设计意图:标记那些理论上可能返回None,但强制用户做空检查反而会带来麻烦的返回类型。不过我有点搞不懂它具体是怎么实现这个目标的,有两个疑问:
SomeType | Any看起来像是说返回值可以是任意类型,但我实际想表达的是它要么是SomeType,要么在极少数特殊情况下是None,这好像没准确传达出真实意图啊?- 我用MyPy的
--strict模式测试过,就算变量能被证明肯定不是None,MyPy也允许做多余的空检查。那这种特殊的类型标记,和直接不做任何特殊处理相比,到底能起到什么作用呢?
备注:内容来源于stack exchange,提问作者julaine
相关产品推荐
相关产品推荐

