6

Factorモジュールで名前が付けられたクラスFactor.py( https://github.com/pgmpy/pgmpy/blob/dev/pgmpy/factors/Factor.pyfactor_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'>

なぜこれが起こっているのですか?

4

2 に答える 2

6

reloadは、同じモジュールから同じクラスの 2 つのコピーを作成する良い方法です。1 つはリロード前 (そのクラスのインスタンスがまだ潜んでいる場合) から、もう 1 つはリロード後です。

ほとんどの場合、新しいタイプのオブジェクトがありましたがFactor、以前にインポートされたため、古いタイプを参照していました。Factorしたがって、オブジェクトが...のインスタンスではないこと は完全に真実Factorです。とにかく、そうではありません。

決して信用しないでくださいreload。:)

于 2014-12-14T07:54:57.437 に答える