暗黙の…
※4/15 追記
Python3 で導入されたとてもキモイ暗黙の __class__ 変数についてちょっと試した。
やっていること
- メソッド内で super() を呼ぶ前に self を別の値にする
- メソッド内で nonlocal __class__ して __class__ を書き換えた後に super() を呼ぶ
結果
$ python3 classtest.py <class '__main__.Test'> <class '__main__.Test'> Traceback (most recent call last): File "/home/shoma/source/garbages/python/classtest.py", line 50, in catch f() File "/home/shoma/source/garbages/python/classtest.py", line 60, in <lambda> catch(lambda: a.call_with_otherself()) File "/home/shoma/source/garbages/python/classtest.py", line 38, in call_with_otherself super() TypeError: super(type, obj): obj must be an instance or subtype of type called 10 Traceback (most recent call last): File "/home/shoma/source/garbages/python/classtest.py", line 50, in catch f() File "/home/shoma/source/garbages/python/classtest.py", line 65, in <lambda> catch(lambda: a.call_super()) File "/home/shoma/source/garbages/python/classtest.py", line 22, in call_super super().test() SystemError: super(): __class__ is not a type (int)
結果考察
以上から言えること
- super() はやっぱり super(__class__, self) の省略
- __class__ がある環境情報は全てのメソッドで同じものを持つ