全局变量在Python Luigi Pipeline中恢复为默认值

时间:2016-11-30 17:18:00

标签: python luigi

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类之前,doHave恢复为true。

基本上,我想做' bar'但是它一直在做' foo'因为全局变量不断恢复为真。

有人可以解释为什么会这样吗?我几乎可以肯定这与Luigi Pipeline有关,而不是Python本身。

1 个答案:

答案 0 :(得分: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()

另请注意,您的代码没有正确缩进。