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 恢复为真。

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

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

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 回答