

Pythonで__instancecheck__メソッドが呼び出されない場合があります。  
以下のコードを実行すると

Falseになるはず→ True  
Falseになるはず→ False  
Falseになるはず→ False  
Falseになるはず→ False

と表示されます。  
本当は一つ目がFalseと表示されるべきですがTrueと出てしまいます。  
なぜ呼び出されないのでしょうか。  
よろしくお願いします。

[code]

    class Analysis(type):
        def __instancecheck__(self, other):
            return False
    
    class SMA(metaclass = Analysis):
        pass
    
    sma=SMA()
    print('Falseになるはず→',isinstance(sma, SMA))
    print('Falseになるはず→',isinstance(1, SMA))
    print('Falseになるはず→',isinstance([], SMA))
    print('Falseになるはず→',isinstance('', SMA))
    
[/code]


CC BY-SA 3.0
2015-12-04T08:20:07.173
19624
2016-06-23T00:19:53.217
2016-03-15T21:29:46.540
4129
13520
question
python
Pythonで__instancecheck__メソッドが呼び出されない


[argusさんのコメント](https://ja.stackoverflow.com/questions/19624/python%E3%81%A7-instancecheck-%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84#comment18284_19624)より転載。

> ソースコード上ではまず最初に type check を行って、 オブジェクトが指定されたクラスのインスタンスであれば即座に True を返しますので
> `__instancecheck__` は実行されません。ここでは sma が SMA クラスのインスタンスなので True が返って終了となります。


CC BY-SA 3.0
2016-06-23T00:19:53.217
26964
2016-06-23T00:19:53.217
2017-04-13T12:52:38.920
-1
8000
19624
answer