【问题标题】:Change global variables from inside class method从类方法内部更改全局变量
【发布时间】:2013-08-08 16:14:19
【问题描述】:

当我尝试执行下面的代码时,第一个列表被修改,而第二个列表没有发生任何变化。有没有办法用全新的列表替换外部列表,或者调用列表方法是我被允许从内部类方法做的唯一事情?我尝试在赋值操作之前添加全局关键字,但它会产生语法错误。

first_list = []
second_list = []


class MyClass:

    def change_values(self):
        first_list.append('cat')
        second_list = ['cat']

 test = MyClass()
 test.change_values()
 print(first_list)
 print(second_list)

【问题讨论】:

  • 问题在于,当您像对 second_list 那样使用赋值运算符时,解释器假定您正在尝试将属性添加到本地函数的命名空间 - 这是本地函数的命名空间之前出现的结果解释器查找顺序中的全局命名空间。

标签: python class methods global


【解决方案1】:

在函数内部使用全局关键字

【讨论】:

    【解决方案2】:

    首先:让全局变量具有可变状态几乎是绝不一个好主意。您应该将模块级变量用作常量或单例。如果要更改变量的值,应将其作为参数传递给函数,然后从函数返回新值。

    说你的问题的答案是:

    first_list = []
    second_list = []
    
    
    class MyClass:
        def change_values(self):
            first_list.append('cat')
            second_list[:] = ['cat']
    
    test = MyClass()
    test.change_values()
    print(first_list)
    print(second_list)
    

    或:

    first_list = []
    second_list = []
    
    
    class MyClass:
        def change_values(self):
            first_list.append('cat')
            global second_list
            second_list = ['cat']
    
    test = MyClass()
    test.change_values()
    print(first_list)
    print(second_list)
    

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多