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