武之新
pythonのissubclassでハマる

最近djangoでWebシステムを作るお仕事しています。python、djangoはなかなかよく出来ていてハマるところが少ないのですが、うっかり軽くハマったのでメモ。

あるクラスがあるクラスを継承しているかどうかをチェックするためには組み込み関数のissubclass()を使いますが、継承元が抽象クラスだとissubclass()はFalseを返してくるらしい。

検証のために次のようにやってみた。

>>> class ABC(object):
...     class Meta:
...             abstract = True
... 
>>> class GHJ(ABC):
...     hoge = 1
... 
>>> issubclass(ABC, GHJ)
False
>>> 
>>> 
>>> class ZXC(object):
...     hoge=1
... 
>>> class ASD(ZXC):
...     hoge=2
... 
>>> issubclass(ASD, ZXC)
True
>>> 

わかってしまえばなんてことないんですが、うっかりすると欲しい結果にならないので要注意

  1. takemasa5の投稿です