Python全局列表追加新元素

14 浏览
0 Comments

Python全局列表追加新元素

有人可以帮我解决一下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 
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

0
0 Comments

在这段代码中,创建了一个名为Practice的类。由于创建了该类,类的变量需要加上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。如果没有构造函数,那么你从类创建的任何对象都无法传递到类中,因此对象的数据将无法绑定到对象上。

0