我有一个名为类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)
现在,即使我甚至将的实例传递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
......不说 Factor
了,反正。
永远不要相信reload
。:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句