2015年12月3日

NoneTypeの定義

NoneType の定義に関する注意点について述べます。

None の型は NoneType です。

>>> type(None)
<type 'NoneType'>

上記のように、None が NoneType であるというのは明らかな事実なのですが、NoneType を明示的に使おうとするとエラーになってしまいます。
>>> n = None

# NoneType を直接使う
>>> isinstance(n, NoneType)
Traceback (most recent call last):
  File "<stdin>", line 1, in 
NameError: name 'NoneType' is not defined

理由はよく分かりませんが、NoneType は直接使用できないようになっているようです。None チェックするには is None とすべき、という指針への暗黙の推奨なのかもしれません。
とは言え、NoneType を使いたい場合もあります。そのためには、type(None) と書く必要があります。
# type(None)を使用
>>> isinstance(n, type(None))
True

# type(None)を一旦変数に代入
>>> MyNoneType = type(None)
>>> isinstance(n, MyNoneType)
True



参考までに、Python 2 では typesライブラリの中に、NoneType が定義されていました。
# Python 2
>>> import types

>>> isinstance(None, types.NoneType)
True

0 件のコメント:

コメントを投稿