0
var_doesHave = True

    class A:
         global var_doesHave
         var_doesHave = False

         # Call Class B

    class B:
         if (var_doesHave):
              # do foo
         else:
              # do bar

次のようなpython luigiパイプラインコードがあります。端末を調べてみると、プログラムはクラス A を呼び出して dosHave = false を設定しているように見えますが、クラス B を実行する前に、dosHave は true に戻ります。

基本的に、「bar」を実行したいのですが、グローバル変数が true に戻り続けるため、「foo」を実行し続けます。

なぜこれが起こっているのか誰か説明できますか?これは、Python 自体ではなく、Luigi Pipeline と関係があるとほぼ確信しています。

4

1 に答える 1

0

Python を正しく使用していません。クラス内では、メソッドを使用する必要があります。特に、__init__インスタンスを初期化するとき (つまり、 を呼び出すときA()) にコードを実行する場合は__call__メソッドを使用し、クラスが呼び出されたときにコードを実行する場合はメソッドを使用する必要があります。

だからあなたのコードを修正:

var_doesHave = True

class B:
    def __init__(self):
        if (var_doesHave):
            print("foo")
        else:
            print("bar")

class A:
    def __init__(self):
        global var_doesHave
        var_doesHave = False
        B()

A()

また、コードが適切にインデントされていないことにも注意してください。

于 2016-12-01T14:06:56.810 に答える