Python Class属性更改

时间:2018-07-01 20:59:16

标签: python class

我是Python的新手,所以... 我有以下代码:

def main():

    Obj1 = classA()
    Obj1.set_p1()
    Obj2 = classA()
    Obj1.del_p1()
    Obj3 = classA()
    classA.list.append(9)

    print(Obj1.list, Obj2.list, Obj3.list, classA.list)

class classA():

    list = []
    def set_p1(self):
        self.list.append(6)

    def del_p1(self):
        self.list = []

if __name__ == '__main__':
    main()

我有这个: ([],[6、9],[6、9],[6、9])

所以我想得到这个: 为什么 Obj1.set_p1() 更改classA.list,但Obj1.del_p1()却没有这样做。 为什么classA.list.append(9)Obj1.list不做任何事情?

1 个答案:

答案 0 :(得分:0)

self.list设置为空列表只会在Obj1上创建一个新的 instance 属性,该属性会隐藏具有相同名称的class属性。

要清除类级别列表,您需要通过self.__class__.list = []类访问它。

但是,实际上这两种方法都应该是类方法,因为它们根本不访问实例。