【问题标题】:Python - How to change value of a declared variable in function , by using data from other functionPython - 如何通过使用来自其他函数的数据来更改函数中声明变量的值
【发布时间】:2021-01-02 13:17:18
【问题描述】:

在课堂上,我声明了一个全局变量“status” 后来我在第一个函数“test_1”中使用了该变量,并赋值status=None

在第二个函数“test_481”中,我将值更改为该变量 status=TRUE

现在我的注意力再次转移到第一个函数上,然后我仍然看到 status 值为 NONE ,我期待值 True 在这里(如何这样做?)

请用示例代码给出详细解释(因为我还在学习阶段)。

class Test_Selenium():
    global status1


    def test_1(self):
        #Selenium driver logic
        
        status1 = None
        if self.status1 == None:
            return self.test_481()
        elif self.status1 == True:
             print(
                    "User is asked for new authentication")

    def test_481(self):
        ##some logic##

        if (logic):
            print("User authenticated - Passed")
            self.status1 = True
            self.driver.quit()
            return self.test_1()

 

【问题讨论】:

  • 您在哪里将其声明为global var?
  • 我在类下声明
  • 请注意global status1self.status1 不一样。您可能想重新审视global 的含义以及类的工作原理。

标签: python-3.x python-2.7 selenium


【解决方案1】:

全局变量实际上并未在您的代码中使用。仅使用属性 (self.status1)。仅当逻辑返回 True 时才设置变量。此外,您应该使用init 方法来初始化类变量。

试试这个代码:

class Test_Selenium():
    
    def __init__(self):
        self.status1 = None  # starting value
        
    def test__init__(self):  #  needed by pytest ?
         self.status1 = None # starting value 

    def test_1(self):
        #Selenium driver logic
        
        if self.status1 == None:  # can also use if not self.status1:
            return self.test_481()
        elif self.status1 == True:
             print("User is asked for new authentication")

    def test_481(self):
        ##some logic##
        
        logic = True

        if (logic):  # must be true to set status1
            print("User authenticated - Passed")
            self.status1 = True
            #self.driver.quit()
            return self.test_1()  # recheck status

ts = Test_Selenium()
print(ts.status1)  # None
ts.test_1()
print(ts.status1)  # True

输出

None
User authenticated - Passed
User is asked for new authentication
True

【讨论】:

  • 谢谢,迈克,我正在使用 pytest,因此我更改了如下代码:'class Test_Selenium(): def test__init__(self): self.status1 = None #starting value def test_1(self): #Selenium 驱动逻辑 if self.status1 == None: # if not self.status1: return self.test_481()' 当我调试时看到 self.status1 == None as Attribute Error: 'Test_Selenium' object没有属性“status1”
  • 请看上面的cmets ^^^
  • 我认为不需要test__init__,但我将其添加到答案中。如果测试人员正确创建对象,则应调用__init__ 来初始化status 变量。
  • 请注意,self.status1 不是类变量(属性)——它绑定到实例。类属性是Test_Selenium.status1
  • @MM - 很好。测试脚本可能需要更改。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 2018-08-15
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
相关资源
最近更新 更多