gpt4 book ai didi

python - isinstance 函数的奇怪行为

转载 作者:太空狗 更新时间:2023-10-29 23:58:46 27 4
gpt4 key购买 nike

我在模块 Factor.py ( https://github.com/pgmpy/pgmpy/blob/dev/pgmpy/factors/Factor.py ) 中有一个名为 Factor 的类,并且在 中还有一个名为 factor_product 的函数>Factor.py 为:

def factor_product(*args):
if not all(isinstance(phi, Factor) for phi in args):
raise TypeError("Input parameters must be factors")
return functools.reduce(lambda phi1, phi2: _bivar_factor_operation(phi1, phi2,
operation='M'), args)

现在即使我将 Factor 的实例传递给函数,它仍然会抛出 TypeError。来自调试器的几行代码,在 if 语句上方设置了断点:

(Pdb) args
args = (<pgmpy.factors.Factor.Factor object at 0x7fed0faf76a0>, <pgmpy.factors.Factor.Factor object at 0x7fed0faf7da0>)

(Pdb) isinstance(args[0], Factor)
False

(Pdb) type(args[0])
<class 'pgmpy.factors.Factor.Factor'>

(Pdb) Factor
<class 'pgmpy.factors.Factor.Factor'>

知道为什么会这样吗?

最佳答案

reload 是一个很好的方法,可以从同一个模块中得到相同类的两个副本:一个来自重新加载之前(如果该类的任何实例仍然潜伏)和一个来自之后。

很可能您有新类型的对象,但 Factor 引用了旧类型,因为它是一段时间前导入的。因此,您的对象不是 Factor 的实例是完全正确的...不是 that Factor,无论如何。

永远不要相信reload。 :)

关于python - isinstance 函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466803/

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