2016-11-30 9 views
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を呼び出してdoesHave = falseを設定しているように見えますが、クラスBを実行する前にdoesHaveはtrueに戻ります。グローバル変数はPythonでデフォルト値に戻ります。Luigi Pipeline

基本的に、私は 'bar'をしたいと思いますが、グローバル変数がtrueに戻って戻ってくるので 'foo'を続けます。

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

答えて

0

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

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() 

はまた、あなたのコードが適切にインデントされていないことを確認します。だからあなたのコードを修正

+1

ここではクラス宣言の順序は関係ありません。 '' B() ''は '' A() ''が呼び出されるまで呼び出されません。これは両方の宣言の後に起こります。 – jasonharper

+0

ありがとう@jasonharperそうです。私の答えを修正... – matagus

関連する問題