【问题标题】:Global variable reverts back to default value in Python Luigi Pipeline全局变量在 Python Luigi Pipeline 中恢复为默认值
【发布时间】:2016-11-30 17:17:59
【问题描述】:
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',但它一直在做'foo',因为全局变量一直恢复为true。

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

【问题讨论】:

    标签: python luigi


    【解决方案1】:

    您没有正确使用 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()
    

    还要注意您的代码没有正确缩进。

    【讨论】:

    • 类声明的顺序在这里无关紧要 - B() 直到 A() 被调用后才会被调用,这发生在两个声明之后。
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多