位于Python 3.x中的NoneType在哪里?

Tre*_*reg 24 python types python-3.x nonetype

在Python 3中,我想检查value是字符串还是字符串None.

一种方法是

assert type(value) in { str, NoneType }
Run Code Online (Sandbox Code Playgroud)

但是NoneTypePython的位置在哪里?

没有任何导入,使用NoneType产品NameError: name 'NoneType' is not defined.

Mar*_*ers 30

您可以使用type(None)获取类型对象,但是您想在isinstance()此处使用,而不是type() in {...}:

assert isinstance(value, (str, type(None)))
Run Code Online (Sandbox Code Playgroud)

NoneType对象不会在任何地方暴露.

我根本不会使用类型检查,我会使用:

assert value is None or isinstance(value, str)
Run Code Online (Sandbox Code Playgroud)

作为None一个单身人士(非常有目的)并NoneType明确禁止继承子类:

>>> type(None)() is None
True
>>> class NoneSubclass(type(None)):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type 'NoneType' is not an acceptable base type
Run Code Online (Sandbox Code Playgroud)

  • @SilasRay:不,没有.它已从模块中删除,因为它是一个简单的[`NoneType = type(None)`](http://hg.python.org/cpython/file/2.7/Lib/types.py#l12)无论如何,相当无意义. (6认同)
  • 是不是来自`types`模块的`types.NoneType`,就像2.X中那样? (2认同)
  • @MartijnPieters仍然,最好只是在“ typing”中加入这一行,这样我就不必在每个源文件中声明“ NoneType = type(None)”。 (2认同)

bad*_*der 7

types.NoneType 正在 Python 3.10 中重新引入。

Python 3.10 中的新功能

改进的模块

类型

重新引入了types.EllipsisType,types.NoneTypetypes.NotImplementedType类,提供了一组易于由类型检查器解释的新类型。(由 Bas van Beek 在bpo-41810 中贡献。)

关于更改的讨论是出于对 的需求types.EllipsisType,导致types.NoneType也被添加以保持一致性