2

isinstance()Pythonでどのように機能するかについて少し迷っています。以前にこの関数を使用したことがあり、今までの動作は非常に明確でした。

少し文脈。文字列またはカーネルをパラメーターとして取ることができるClassifierメソッドを持つクラスがあります。set_kernelと呼ばれるカーネル型のオブジェクトをメイン関数から作成していますk。私が使用するときisinstance(k, Kernel)の答えはTrueです。ただし、kパラメーターとして分類子に渡し、関数内で同じチェックを行うと、 が返されますFalse

ここで何が起こっているかについての手がかりはありますか?わかりやすくするために、いくつかのコード スニペットを添付します。

class Kernel(object):
    pass

class Gaussian(Kernel):
    pass

class Classifier():
    def set_kernel(kernel, *args):
        print isinstance(kernel, Kernel) # This prints False


k = Gaussian() # This is a son of Kernel
print isinstance(k, Kernel) # This prints True

c = Classifier()
c.set_kernel(k) # This prints False, check above

ありがとう!

編集 1: コードを改善し、問題自体に関係のないすべてのものを消去しました。

4

2 に答える 2