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: コードを改善し、問題自体に関係のないすべてのものを消去しました。