gpt4 book ai didi

python - isinstance python返回不同的值

转载 作者:行者123 更新时间:2023-11-28 21:07:49 26 4
gpt4 key购买 nike

我对 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:我改进了编码并清理了所有与问题本身无关的东西。

最佳答案

如果您的 set_kernel 函数不是 staticmethod 如果您在实例上调用此函数,则第一个参数是实例。参见示例:

class Classifier():
def set_kernel(kernel, *args):
print(kernel)
print(isinstance(kernel, int))


>>> k = 10
>>> print(k)
10
>>> print(isinstance(k, int))
True

>>> c = Classifier()
>>> c.set_kernel(k)
<__main__.Classifier object at 0x0000020FABD0FDA0>
False

但是,如果您将其设为 staticmethod,它“有效”:

class Classifier():
@staticmethod
def set_kernel(kernel, *args):
print(kernel)
print(isinstance(kernel, int))

>>> k = 10
>>> print(k)
10
>>> print(isinstance(k, int))
True

>>> c = Classifier()
>>> c.set_kernel(k)
10
True

或者如果您不希望它是静态的,则为实例插入另一个参数,通常在参数列表中称为“self”:

class Classifier():
def set_kernel(self, kernel, *args):
print(kernel)
print(isinstance(kernel, int))

关于python - isinstance python返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com