【问题标题】:Python global list appending new elements [duplicate]Python全局列表追加新元素[重复]
【发布时间】:2015-09-14 19:30:57
【问题描述】:

有人可以帮我处理 python 列表吗?我创建了一个全局变量和全局列表。更新了其他方法中的全局值。全局值更新正常,但全局列表给了我一个错误。

class Practice(object):

    foo = []
    var = 0;

    def __updateVaribale(self):
       global var
       var = 9;

    def __updateList(self):
       global foo
       foo.append("updateList 1")


    def main(self):
      self.__updateVaribale();
      global var
      print(var)

      self.__updateList()
      global foo
      print(foo)

Obj = Practice();
Obj.main();       

输出

 9
Traceback (most recent call last):
 File "Python Test\src\Practice.py", line 31, in <module>
Obj.main();
 File "Python Test\src\Practice.py", line 26, in main
self.__updateList()
  File "Python Test\src\Practice.py", line 18, in __updateList
foo.append("updateList 1")
NameError: name 'foo' is not defined

【问题讨论】:

  • 这些是类变量。您可以使用self 访问它们,例如self.foo

标签: python list python-3.x


【解决方案1】:

您已经创建了一个类,因此该类的变量需要具有 self 前缀,以便在实例化“Obj”对象时,其变量和方法属于它(引用绑定的对象)。

除了将 self 添加到每个变量(属性)之外,您还需要向您的类添加一个构造函数。

见下文:

class Practice():
    def __init__(self):
        self.foo = []
        self.var = 0;

    def __updateVaribale(self):
       self.var = 9;

    def __updateList(self):
       self.foo.append("updateList 1")


    def main(self):
      self.__updateVaribale();
      print(self.var)

      self.__updateList()
      print(self.foo)

Obj = Practice()
Obj.main()

【讨论】:

  • 为什么要向类添加构造函数?像 java 一样,python 不会通过添加默认构造函数来处理这个问题?
  • 如果没有构造函数,该类将没有初始化程序,并且在您创建类的新实例时不会自动调用。在该函数中,新创建的对象被分配给参数 self。没有它,您从类创建的任何对象都将无法传递到类中,因此对象数据将不会绑定到对象。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 2019-04-06
  • 2020-08-08
  • 2015-02-04
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多