这段代码与我预想的输出不一样:append函数不应该之针对p1的name吗?为什么p2和Person类的name都有变动?我以为p1和p2做为person的实例,为什么p2和Person都会跟着p1改变?
class Person:
name=[]
p1=Person()
p2=Person()
p1.name.append("1")
print(p1.name)
print(p2.name)
print(Person.name)
['1']
['1']
['1']
希望能为我答疑解惑
没有self.前缀的,是静态变量,类的所有实例共享。
前面带self.前缀的,才是每个实例独有的。
这是Python和C/java不同的地方。
你这个name变量是静态变量,所以所有类实例都一样的
name1 是属于类Test的类变量,不属于类的实例,不同的实例调用都是指向同一个地址
name2是属于对象的变量。实例化后地址不同
class Person:
name1 = []
def __init__(self):
self.name2 = []
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!