Ank*_*kan 6 python isinstance python-3.x
我有一个名为类Factor模块中Factor.py(https://github.com/pgmpy/pgmpy/blob/dev/pgmpy/factors/Factor.py),也有功能命名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)
Run Code Online (Sandbox Code Playgroud)
现在,如果我甚至将实例传递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'>
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
reload 是一个很好的方法,可以从同一个模块中获得同一个类的两个副本:一个来自重新加载之前(如果该类的任何实例仍然潜伏着),另一个来自之后.
很可能你有新类型的对象,但是Factor引用旧类型,因为它是在不久前导入的.所以这是完全真实的,你的对象不是实例Factor......不说 Factor了,反正.
不要相信reload.:)