python NoneTypeObjectってなんなのさ

友人と飲んでてpythonってNoneオブジェクトって継承できんの?

って話になったので調査

まずNoneオブジェクトってそもそもなんなのさ?ってとこから

pythonのマニュアルによると


Python における None オブジェクトで、値がないことを表します。このオブジェクトにはメソッドがありません。リファレンスカウントについては、このオブジェクトも他のオブジェクトと同様に扱う必要があります。

だそうで

他の言語でいうとこのNullとかnilみたいな感じなのかな?

でもメソッドがありませんって書いてるのに


>>> None.__str__()
'None'

は動いちゃう

じゃあ__setattr__は?


>>> None.__setattr__("name", "test")
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'NoneType' object has no attribute 'name'

属性がないそうですよ

じゃあ次はNoneTypeObjectを継承したクラスを作ってみる


>>> class NoneTest(None):
... def __init__(): pass
...
Traceback (most recent call last):
File "", line 1, in
TypeError: Error when calling the metaclass bases
cannot create 'NoneType' instances

とかって言われちゃった

なるほどNoneTypeObjectはインスタンスを生成できないのね

結論。None is NoneでSingletonでしたと

他の言語も調べてみたいね