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でしたと
他の言語も調べてみたいね