考虑以下示例:
class Ciao():
a = 1
def whatIsIt(self):
print(self.a)
i = Ciao()
i.a = 2
i.whatIsIt() #Returns 2
我正在创建 Ciao 类的实例,修改类变量,然后在最后一行打印它。对我来说,类变量 a 在创建对象 i 之后,其行为完全与此代码片段中的实例变量相同。
class Ciao2():
def __init__(self):
self.a = None
def whatIsIt(self):
print(self.a)
i = Ciao2()
i.a = 2
i.whatIsIt() #Returns 2
实例化对象后,类和实例变量之间有什么根本区别吗?
最佳答案
是的,有根本的区别。当变量是可变的(例如列表)并且您使用同一类的多个实例时可以看到这一点。对类变量所做的更改将传递到所有实例,但对实例变量所做的更改不会:
class Ciao():
a = [1]
def __init__(self):
self.b = [1]
i1 = Ciao()
print(i1.a, i1.b) # [1] [1]
i1.a.append(2)
i1.b.append(2)
print(i1.a, i1.b) # [1, 2] [1, 2]
i2 = Ciao()
print(i2.a, i2.b) # [1, 2] [1]
关于python - 当我们实例化一个对象时,Python中的类变量是否表现为实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64256559/